题目描述:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:如果n是小于字符串长度的,就可以新建一个空字符串,用来接收反转以后的字符串,也就是新字符串的开始,是从旧字符串第n+1个字符开始填入,直到旧字符串的结尾
然后新字符串后面接着填充旧字符串从第一个到第n个的字符
class Solution {
public:
string reverseLeftWords(string s, int n) {
int slow=0;
string ans;
ans.resize(s.size())//这个是关键,必须提前设置字符串的大小,不然输出会错
if(n<s.size())
{
for(int i=n;i<s.size();i++)
{
ans[slow]=s[i];
slow++;
}
for(int i=0;i<n;i++)
{
ans[slow]=s[i];
}
}
else
{
for(int i=s.size()-1;i>=0;i--)
{
ans[slow]=s[i];
slow++;
}
}
return ans;
}
}
看了代码随想录以后的解题方法非常简单,并且对我之后做题影响很大
先反转前n个字符,再反转第n+1到最后一个字符,在整个反转字符串
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;
}
};