题目:
给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)
样例
对于字符串 "abcdefg"
.
offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"
解决方案:
对于这个问题,换一个角度思考一下。
将一个字符串分成X和Y两个部分,在每部分字符串上定义反转操作,如X^T,即把X的所有字符反转(如,X="ab",那么X^T="ba"),那么就得到下面的结论:(X^TY^T)^T=YX,显然就解决了字符串的反转问题。
代码实现(JAVA):
public void rotateString(char[] ch, int offset){
int left = 0;
int right = ch.length - 1;
if (ch != null && ch.length > 0) {
// 这里注意的是offeset会大于字符串长度的情况,所以要对offeset处理:
// offeset = offeset%len
offset = offset % (right+1);
// 1.左半部分逆序
rotateStr(ch, 0, right - offset);
// 2.右半部分逆序
rotateStr(ch, right - offset + 1, right);
// 3.整体逆序
rotateStr(ch, left, right);
}
}
public void rotateStr(char[] ch, int left, int right){
while(left < right){
char temp;
temp = ch[left];
ch[left] = ch[right];
ch[right] = temp;
left++;
right--;
}
}