一 题目:
二 思路:
定义每次需要反转的左右边界,转化为普通的反转字符串
三 代码:
class Solution {
public String reverseStr(String s, int k) {
char[] strArr = s.toCharArray();
int len=strArr.length;
if (k>len){
reverseStr(strArr,0,len-1);
return String.valueOf(strArr);
}
for (int i=0;i<len-1;i=i+2*k){
//翻转前k个
reverseStr(strArr,i,i+k-1);
//剩下元素个数
int llen=(len-1)-(i+2*k)+1;
if (llen<k&&llen>0){
reverseStr(strArr,i+2*k,len-1);
break;
}else if ((llen<2*k)&&(llen>=k)&&llen>0){
reverseStr(strArr,i+2*k,i+2*k+k-1);
break;
}
}
return String.valueOf(strArr);
}
public void reverseStr(char[] strArr , int l,int r){
while (l<r){
swap(strArr,l,r);
l++;
r--;
}
}
public void swap(char[] data,int x,int y){
char temp=data[x];
data[x]=data[y];
data[y]=temp;
}
}