首页 > 其他 > 详细

IT公司100题-26-左旋转字符串

时间:2014-08-21 18:34:34      阅读:289      评论:0      收藏:0      [点我收藏+]
问题描述:
给定字符串和左旋的字符数,写程序实现字符串的左旋操作。例如对于字符串”12345678″, 左旋转4个字符后,变成”56781234″。要求时间复杂度为O(n),空间复杂度O(1)。
 
分析:
假设字符串表示为XY,X表示需要左旋的部分,左旋后字符串表示为YX。
根据公式:bubuko.com,布布扣
 

代码实现:

 1 // 26.cc
 2 #include <iostream>
 3 #include <string>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 // 反转字符串
 8 void reverse_str(char* start, char* end) {
 9     if (!start || !end)
10         return;
11     while (start < end) {
12         swap(*start, *end);
13         start++;
14         end--;
15     }
16 }
17 
18 // 左移k个字符
19 void left_rotate_str(char*& str, size_t k) {
20     if (!str || k <= 0)
21         return;
22 
23     size_t n = strlen(str);
24     k = k % n;
25     
26     reverse_str(str, str + k - 1);
27     reverse_str(str + k, str + n - 1);
28     reverse_str(str, str + n - 1);
29 }
30 
31 int main() {
32     cout << "input a str:" << endl;
33 
34     string s;
35     getline(cin, s);
36 
37     char* str = new char[s.size() + 1];
38     strcpy(str, s.c_str());
39     int k = 5 < s.size() ? 5 : 0;
40     left_rotate_str(str, k);
41 
42     cout << "after left rotate " << k << " chars:" << endl << str << endl;
43     return 0;
44 }

输出:

$ ./a.exe
input a str:
12345678
after left rotate 5 chars:
67812345

 

IT公司100题-26-左旋转字符串,布布扣,bubuko.com

IT公司100题-26-左旋转字符串

原文:http://www.cnblogs.com/dracohan/p/3927548.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!