剑指offer面试题之左旋转字符串
2016-04-01 10:59
253 查看
1,问题:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
2,想法:
看例子后,想到反转,先反转左边部分得到,cbaXYZdef,再旋转右边部分,得到cbafedZYX,然后再全部旋转得到XYZdefabc.所以只要三次旋转即可。
3,编码:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
2,想法:
看例子后,想到反转,先反转左边部分得到,cbaXYZdef,再旋转右边部分,得到cbafedZYX,然后再全部旋转得到XYZdefabc.所以只要三次旋转即可。
3,编码:
class Solution { public: void reverseString(string &str,int start, int end)//传进去的参数必须为引用 { if (str == "") { return; } if (start == end) { return; } int a = start; int b = end; int temp; while (a < b) { temp = str[a]; str[a] = str[b]; str[b] = temp; a++; b--; } } string LeftRotateString(string str, int n) { if (str == "") { return str; } if (n > str.size()) { n = n - str.size(); } reverseString(str, 0, n - 1);//先部分旋转左边 reverseString(str, n, str.size() - 1);//部分旋转右边 reverseString(str, 0, str.size() - 1);//全部旋转一次 return str; } };