LeetCode-字符串左旋转字符串
Posted Flix
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-字符串左旋转字符串相关的知识,希望对你有一定的参考价值。
题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
说明: 1 <= k < s.length <= 10000
题目链接: https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
思路
方法和旋转数组这题是一样的。步骤如下(假设字符串长度为 n):
- 对整个字符串进行翻转(在 [0, n-1] 范围内进行翻转);
- 在 [0, n-k-1] 范围内对字符串进行翻转;
- 在 [n-k, n-1] 范围内对字符串进行翻转;
代码如下:
class Solution {
public:
string reverseLeftWords(string s, int k) {
int n = s.size();
k %= n;
reverse(s, 0, n-1);
reverse(s, 0, n-k-1);
reverse(s, n-k, n-1);
return s;
}
void reverse(string& s, int left, int right){
while(left<right){
swap(s[left], s[right]);
left++;
right--;
}
}
};
- 时间复杂度:O(n)
- 空间复杂度:O(1)
以上是关于LeetCode-字符串左旋转字符串的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode(剑指 Offer)- 58 - II. 左旋转字符串
LeetCode(剑指 Offer)- 58 - II. 左旋转字符串
Leetcode剑指 Offer 58 - II. 左旋转字符串(简单模拟)