这道题其实更像在训练怎么把代码写的更简洁。。
题目有三个地方会反复利用:
1、判断是否应该反转;
2、反转字符串
3、是否已经离开边界
本题时间复杂度为O(N)
本体空间复杂度为O(1)
因此设计了两个函数,用来防止代码累赘:
1、反转字符串
public void reverse(char[] target,int start,int end){
//反转
while(start < end){
char temp = target[start];
target[start] = target[end];
target[end] = temp;
start++;
end--;
}
}
2、是否已经离开边界
public int checkBorder(int start,int len,int k){
if(start + k - 1 <= len){
return start + k - 1;
}else{
return len;
}
}
核心代码:
public String reverseStr(String s, int k) {
int start = 0;
int len = s.length()-1;
int end =checkBorder(start,len,k);
char[] chs = s.toCharArray();
int batch = 1;
while(start <= len){
//奇数次
if(batch % 2 == 1){
reverse(chs,start,end);
}
batch += 1;
start = end + 1;
//边界检测
end =checkBorder(start,len,k);
}
return String.valueOf(chs);
}