题目:给定一个字符串s和整形数字k,需要将2k个字符中前k个字符进行翻转。当剩余字符不足k个时,翻转全部字符;当剩余的字符数大于等于k并小于2k时,则翻转前k个字符,剩余字符保持原状。字符串中只包含英文小写字母,长度不超过10000.
输入:字符串s和整形数字k
输出:翻转后的字符串
示例1:输入:abcdefg 2 输出:bacdfeg
(我自己补充的)示例2:输入:abcd 2 输出:bacd
示例3:输入 abc 4 输出:cba
那就2k为一个单元的翻转,剩余的在判断属于哪一种情况。
我的代码如下:
#include <iostream>
#include <string>
using namespace std;
void kreverse(string &str,int start,int k){
if(k<0) return;
int end=start+k-1;
while(start<end){
swap(str[start],str[end]);
start++;
end--;
}
}
int main(){
string s;
int k;
cin>>s;
cin>>k;
int len=s.length();
int i=0;
while(i<=len-2*k){
kreverse(s,i,k);
i=i+2*k;
}
if(len-i<k) kreverse(s,i,len-i);
else if((len-i>=k)&&(len-i<2*k)) kreverse(s,i,k);
else ;
cout<<s<<endl;
cin.get();
cin.get();
return 0;
}
测试用例全部通过!!