题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
思路
将字符串分成两部分,一部分是要转移到尾部的部分,一部分是要转移到头部的部分。
先将两部分的字符串分别翻转一次。
如将描述中的 ab、cdefg 反转成 ba、gfedc,然后再将两个部分作为一个整体进行翻转。
bagfedc 整体翻转成 cdefgab,即所要得到的字符串。
代码
class Solution {
public String reverseLeftWords(String s, int n) {
if (s == null || s.length() <= 0 || n >= s.length() || n <= 0) {
return s;
}
char[] charArray = s.toCharArray();
reverse(charArray, 0, n - 1);
reverse(charArray, n, charArray.length - 1);
reverse(charArray, 0, charArray.length - 1);
return new String(charArray);
}
private void reverse(char[] charArray, int left, int right) {
char temp;
while (left < right) {
temp = charArray[left];
charArray[left] = charArray[right];
charArray[right] = temp;
left++;
right--;
}
}
}
来源:oschina
链接:https://my.oschina.net/Oaki/blog/3193657