目录
题目
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
限制:
1 <= k < s.length <= 10000
解题思路
这道题可以有两种可行的思路:
- n为左旋转的位数,那么如果以位移的角度来分析,n便是字符串中每个元素进行左移的次数。
- n为左旋转的位数,那么如果从整体的角度来分析,[0,n-1]位置的元素位于移动后的字符串的尾部,[n,s.length()-1]位置的元素位于移动后字符串的首部。
按照思路1,那么大致的流程是这样的:
按照思路2,那么大致的流程是这样的:
题解
class Solution {
public String reverseLeftWords(String s, int n) {
//n是旋转的次数,也可以看成是需要移动的字符串首部元素的数量
char[] MoveString = new char[s.length()];
int pos = 0;
for(int i=n;i<s.length();i++){
MoveString[pos++] = s.charAt(i);
}
for(int i=0;i<n;i++){
MoveString[pos++] = s.charAt(i);
}
return new String(MoveString);
}
}