思路1.我的代码
比起反转字符串多了几个条件
定义两个指针left和right,
当len-left>2k时,right向右走k-1,然后反转
当len-left<k时,反转left到len-1
当len-left>=k&&len-left<2*k,反转left,left+k-1
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| void reverseString(char* s, int left,int right) { while(left<right){ char temp=s[left]; s[left]=s[right]; s[right]=temp; left++; right--; } }
char* reverseStr(char* s, int k) { int left=0; int right=0; int len=strlen(s); while(len-left>=2*k){ right+=k-1; reverseString(s,left,right); left+=2*k; right=left; } if(len-left<k){ reverseString(s,left,len-1); } else if(len-left>=k&&len-left<2*k){ reverseString(s,left,left+k-1); }
return s; }
|
思路2,直接循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| void reverseString(char* s, int left,int right) { while(left<right){ char temp=s[left]; s[left]=s[right]; s[right]=temp; left++; right--; } } int min(int x,int y){ return x>y?y:x; }
char* reverseStr(char* s, int k) { int len=strlen(s); for(int i =0;i<len; i+=2*k){ //取数组长度和反转终止点的最小值,就不用分情况讨论 reverseString(s,i,min(i+k,len)-1); } return s; }
|