对于一个字符串,和字符串中的某一位置,请设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边。
给定字符串A和它的长度n以及特定位置p,请返回旋转后的结果。
测试样例:
"ABCDEFGH",8,4
返回:"FGHABCDE"
两种做法:一种是基础做法,另一种是调用了reverse函数。
string rotateString(string A, int n, int p) {
//先将两个部分分别旋转,再整体旋转
reverse(A.begin(),A.begin()+p+1);
/*int i=0,j=p;
while(i<j)
swap(A[i++],A[j--]);*/
reverse(A.begin()+p+1,A.end());
/*i=p+1,j=n-1;
while(i<j)
swap(A[i++],A[j--]);*/
reverse(A.begin(),A.end());
/*i=0,j=n-1;
while(i<j)
swap(A[i++],A[j--]);*/
return A;
}
用一种巧妙的做法是:A+A,再直接截取所要求的片段 。
/*第一次写Python把#write code here当成注释删掉了。。。*/
def rotateString(self, A, n, p):
# write code here
return A[p+1:]+A[:p+1]
这种思路用c/c++实现的话:
return A.substr(p+1, n) + A.substr(0, p+1);