1.题目描述
2.题解
本题的难点是如何寻找需要进行交换操作的字符串片段,根据题意可以把字符串分为两部分:第一部分是前2nk个字符串,第二部分是剩下的长度小于2k的片段。
对于第一部分,进行重复的交换操作,难度不大。 对于第二部分,分为两种情况,一是片段长度大于k,则交换前k个;二是片段长度小于k,则把整个片段做交换。
第二部分的操作细节:首先要知道该片段做交换的起始指针两种情况中都是固定的,区别就是末指针。可以定义一个末指针end,第一种情况下end=起始指针+k-1,第二种情况下end=length-1。
代码可呈现为:
end=length-1>i+k-1?i+k-1:length-1;
3.代码示例
class Solution {
public String reverseStr(String s, int k) {
char[] c=s.toCharArray();
int length=c.length;
for(int i=0;i<length;i+=2*k){
swap(c,i,length-1>i+k-1?i+k-1:length-1);
}
return String.valueOf(c);
}
//交换函数
public void swap(char[] c,int i,int k){
char temp;
while(i<k){
temp=c[i];
c[i++]=c[k];
c[k--]=temp;
}
}
}