Leetcode.剑指offer.58-Ⅱ左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = “abcdefg”, k = 2
输出: “cdefgab”
示例 2:
输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”
限制:
1 <= k < s.length <= 10000
思路:先整体旋转在局部旋转
解法一(自己最开始想到的解法),要造成空间的损耗
class Solution {
public:
string reverseLeftWords(string s, int n) {
int oldsize=s.size();
s.resize(s.size()+n);
int newsize=s.size();
for(int i=0,j=oldsize;i<n;i++,j++){
s[j]=s[i];
}
string s1(oldsize,0);
for(int i=n,j=0;i<newsize;i++,j++){
s1[j]=s[i];
}
return s1;
}
};
解法二
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(), s.begin() + n);
reverse(s.begin() + n, s.end());
reverse(s.begin(), s.end());
return s;
}
};