您的位置:首页 > 职场人生

剑指offer面试题之左旋转字符串

2016-04-01 10:59 253 查看
1,问题:

汇编语言中有一种移位指令叫做循环左移(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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: