题目地址:
https://leetcode.com/problems/reverse-string-ii/
给定一个字符串,再给定一个正整数 k k k。执行如下操作,对每 2 k 2k 2k个字符,翻转前 k k k个;如果剩余数量小于 k k k个,则将剩余全部翻转;如果剩余数量大于等于 k k k个但不足 2 k 2k 2k个,则翻转前 k k k个。代码如下:
public class Solution {
public String reverseStr(String s, int k) {
if (s == null || s.isEmpty()) {
return s;
}
char[] str = s.toCharArray();
int idx = 0;
while (true) {
if (idx + 2 * k <= str.length) {
flip(str, idx, idx + k - 1);
idx = idx + 2 * k;
} else if (idx + k > str.length) {
flip(str, idx, str.length - 1);
break;
} else {
flip(str, idx, idx + k - 1);
break;
}
}
return new String(str);
}
private void flip(char[] str, int l, int r) {
while (l < r) {
char tmp = str[l];
str[l] = str[r];
str[r] = tmp;
l++;
r--;
}
}
}
时间复杂度 O ( n ) O(n) O(n)。