字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
- 1 <= k < s.length <= 10000
分析:
方法1:切片+拼接
将 [0, k) 的部分切片拼接到 [k, len) 的部分即可,注意长度小于等于 k 时直接返回原字符串即可。
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public String reverseLeftWords(String s, int n) {
return s.length() > n ? s.substring(n) + s.substring(0, n): s;
}
}
方法2:遍历
利用 StringBuilder 进行存储两个区域的字符,该方法没有上面快。
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public String reverseLeftWords(String s, int n) {
//存储字符
StringBuilder sb = new StringBuilder();
//遍历字符串
for(int i = n; i < s.length(); ++i){
sb.append(s.charAt(i));
}
for(int i = 0; i < n; ++i){
sb.append(s.charAt(i));
}
return sb.toString();
}
}
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof