class Solution { public: string reverseStr(string s, int k) { int n = size(s); for(int i=0;i<n;i+=2*k) { int left=i; int right=min(i+k-1,n-1); while(left<=right) { swap(s[left],s[right]); left++; right--; } } return s; } };
思路:
题目理解:对一个字符串,前k个反转,后k个不反转,依此类推 ......
1.设一个循环,实现间隔2k进行操作;
2.循环中实现前k个反转;
问题:
1.右边界的定义为什么是min(i+k-1,n-1)
i+k-1 类比left =0,right=k-1;left = i,right = i+k-1;
当s=abc
i=0 ,i=2时,left = 2,right =2+2-1=3,s[2] = 'c';s[3]不存在:超出数组边界索引
预期输出是bac
n-1 =3-1=2;是不变的。
怎么想到这一点?-----为了不超出边界索引,故而n-1
浙公网安备 33010602011771号