反转字符串II
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
- 如果剩余字符少于
k
个,则将剩余字符全部反转。 - 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
java
public String reverseStr(String s, int k) {
StringBuilder res = new StringBuilder();
int start = 0;
while(start + k<=s.length()){
//n - n+k
res.append(reverse(s.substring(start, start + k)));
if(start + 2*k<=s.length()){
//n+k+1 - n+2k
res.append(s.substring(start+k,start+2*k));
}else{
res.append(s.substring(start+k));
}
start += 2*k;
}
if (start<s.length()) {
res.append(reverse(s.substring(start)));
}
return res.toString();
}
String reverse(String s){
int start = 0;
int end = s.length()-1;
char[] arr = s.toCharArray();
char tmp;
while(start < end){
tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
start++;
end--;
}
return new String(arr);
}
双指针