541. 反转字符串 II
541. 反转字符串 II
分析
这个题直接用模拟即可,直接用 while 循环,i 为每次循环处理的子串的起点,初始值为 0,循环条件为 i<chars.length,每次循环,我们需要能确定反转的范围,起点为 i,终点其实是 i+k-1 和 chars.length-1 中小的那一个,确定了范围之后,操作完反转,直接将 i 加上 2*k,然后继续循环即可。
有一个很容易迷惑的地方就是,题目中说反转前 k 个字符,如果其实索引为 i,那么终点索引其实是 i+k-1,而不是 i+k。
算法的时间复杂度是
解题
class Solution {
public String reverseStr(String s, int k) {
char[] sChar = s.toCharArray();
int i = 0;
while(i<sChar.length){
int j = Math.min(i+k-1,sChar.length-1);
int left=i,right=j;
while(left<right){
char temp = sChar[right];
sChar[right] = sChar[left];
sChar[left] = temp;
left++;
right--;
}
i+=2*k;
}
return new String(sChar);
}
}