题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
思路:利用左移个数对字符串长度求余,看要左移几位。
class Solution {
public:
string LeftRotateString(string str, int n) {
int m = str.size();
if(m == 0)
return str;
int t = n % m;
if(t == 0)
return str;
string ret;
for(int i = t;i < str.size();i++)
ret += str[i];
for(int i = 0;i < t;i++)
ret += str[i];
return ret;
}
};
另一种思路:平移多少位。。利用翻转的思想,先整体翻转,在n的左右两部分各自翻转。
classTranslation{
public:
stringstringTranslation(string A,intn,intlen)
{
if(len>n)
exit(-1);
reverseWord(A,0,len-1);
reverseWord(A,len,n-1);
reverseWord(A,0,n-1);
returnA;
}
voidreverseWord(string &A,intlow,inthigh)
{
if(low>=high)
return;
char temp;
while(low <high)
{
temp=A[low];
A[low]=A[high];
A[high]=temp;
low++;
high--;
}
}
};