这道题目其实也是模拟,实现题目中规定的反转规则就可以了。
一些同学可能为了处理逻辑:每隔2k个字符的前k的字符,写了一堆逻辑代码或者再搞一个计数器,来统计2k,再统计前k个字符。
其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。
因为要找的也就是每2 * k 区间的起点,这样写,程序会高效很多。
char * reverseStr(char * s, int k){
int len=strlen(s);
int i;
for(i=0;i<len;i+=(2*k)){
k=i+k>len?len-i:k;
int left=i,right=i+k-1;
while(left<right){
char temp = s[left];
s[left++] = s[right];
s[right--] = temp;
}
}
return s;
}