【剑指 Offer 58 - II. 左旋转字符串】
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
左旋转字符串
示例 1
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
思路
- 反转前k个元素;
- 反转剩余的元素;
- 反转整个字符串;
Solution
class Solution {
public String reverseLeftWords(String s, int n) {
char[] array = s.toCharArray();
// reverse the first n elements
swap(array, 0, n - 1);
// reverse elements in the range n to array.length
swap(array, n, array.length - 1);
// reverse this array
swap(array, 0, array.length - 1);
// return result
return new String(array);
}
public void swap(char[] array, int start, int end) {
while (start < end) {
array[start] ^= array[end];
array[end] ^= array[start];
array[start] ^= array[end];
start++;
end--;
}
}
}