题目:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
思路:
- 反转区间为前n的子串
- 反转区间为n到末尾的子串
- 反转整个字符串
此题比较简单,直接上代码:
#include<iostream>
#include <string.h>
using namespace std;
void reverse(string &s,int start,int end)
{
for (int i=start,j=end;i<j;i++,j--)
{
swap(s[i],s[j]);
}
}
void reverse_s(string &s,int k)
{
reverse(s,0,k-1);
reverse(s,k,s.size()-1);
reverse(s,0,s.size()-1) ;
cout<<"res: "<<s<<endl;
}
int main()
{
cout<<"string"<<endl;
string s;
getline(cin,s);
cout<<"k"<<endl;
int k;
cin>>k;
reverse_s(s,k);
return 0;
}
结果: