反转字符串问题
- 给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
- 如果剩余字符少于 k 个,则将剩余字符全部反转。
- 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
问题分析
这个问题一共由两个子问题组成
1、寻找反转区间
通过一个for循环,每次移动2k个位置,在每次循环里面判断处理情况
- 后面所剩字符大于等于k,则反转后面的k个字符
- 后面所剩字符小于k,则反转剩余的字符
2、对反转区间的字符进行反转
代码
public class ReverseStr {
//实现字符串的反转
public void reverse(char []s,int start,int end){
for(int i=start,j=end;i<j;i++,j--){
char temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
public String reverseStr(String s, int k) {
char[] a=s.toCharArray();
//每次移动2k个位置
for(int i=0;i<s.length();i=i+2*k){
//剩下的元素大于等于k时
if(i+k<=a.length){
reverse(a,i,i+k-1);
continue;
}
//剩下的元素小于k时
reverse(a,i, a.length-1);
}
return new String(a);
}
}