Problem: Rotate String (LintCode)
思路
还是三步翻转法的原理,只要涉及到翻转(rotate)的东西,都应该首先想到三步翻转法
注意:有时候需要做一些转化,比如这里的,offset 和 str.length 的换算关系,把他们转化为“左边”和“右边”的 index
public class Solution {
/**
* @param str: an array of char
* @param offset: an integer
* @return: nothing
*/
public void rotateString(char[] str, int offset) {
if (str == null || str.length == 0) {
return;
}
offset = offset % str.length;
reverse(str, 0, str.length - 1 - offset);
reverse(str, str.length - offset, str.length - 1);
reverse(str, 0, str.length - 1);
return;
}
private void reverse(char[] str, int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
易错点
offset转化
offset = offset % str.length;
通过这样可以避免offset比数组数值大的情况
index之间的转化
reverse(str, 0, str.length - 1 - offset); reverse(str, str.length - offset, str.length - 1); reverse(str, 0, str.length - 1);
遇到搞不准的时候,只需要拿两个小例子试一下就可以得出他们的关系
Last updated
Was this helpful?