题目描述
对于一个字符串,和字符串中的某一位置,请设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边。
给定字符串A和它的长度n以及特定位置p,请返回旋转后的结果。
测试样例:
"ABCDEFGH",8,4
返回:"FGHABCDE"
思路一:用swap函数
分成两部分分别swap,最后总体来一次swap
class StringRotation {
public:
string rotateString(string A, int n, int p) {
int i=0,j=p;
while(i<j)
{
swap(A[i++],A[j--]);
}
i=p+1,j=n-1;
while(i<j)
{
swap(A[i++],A[j--]);
}
i=0,j=n-1;
while(i<j) swap(A[i++],A[j--]);
return A;
}
};
思路二:
用reverse函数,思路同一
class StringRotation {
public:
string rotateString(string A, int n, int p) {
reverse(A.begin(),A.begin()+p+1);
reverse(A.begin()+p+1,A.begin()+n);
reverse(A.begin(),A.begin()+n);
return A;
}
};
思路三:
投机
string b=A+A;
string a=b.substr(p+1,n);
return a;