码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-21 18:34:34      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   strong   ar   

问题描述:
给定字符串和左旋的字符数,写程序实现字符串的左旋操作。例如对于字符串”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-左旋转字符串

标签:style   blog   http   color   os   io   strong   ar   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!