编程理解——翻转前k个字符

来源:互联网 发布:javlibrary新域名 12 编辑:程序博客网 时间:2024/06/07 06:13

题目:给定一个字符串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;}
测试用例全部通过!!

原创粉丝点击