给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
提示:
该字符串只包含小写英文字母。
给定字符串的长度和 k 在 [1, 10000] 范围内。
思路
以2k为一组数据。
1、每次取一块数据如果大于2k, 证明后续可能还有多组数据。
2、如果取的一块数据小于2k大于k 或者 小于k, 则是最后一组数据。
class Solution {
public String reverseStr(String s,int k){
//将字符串放到arr里
char[] arr=s.toCharArray();
//取数组长度
int n=arr.length;
int i=0;
while(i<n){
int j =Math.min(i+k-1,n-1);
swap(arr,i,j);
i+=2*k;
}
return String.valueOf(arr);
}
private void swap(char[] arr,int f,int r){
while(f<r){
char temp=arr[f];
arr[f++]=arr[r];
arr[r--]=temp;
}
}
}