leecode541反转字符串(带有调试代码)
完整带有调试代码
package heima_study.day3;
import java.util.Scanner;
public class 反转字符串541 {
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
String s = input.next();
int k = input.nextInt();
String temp = reverseStr(s, k);
System.out.println(temp);
input.close();
}
public static String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for(int i = 0;i < ch.length;i += 2 * k){
int start = i;
// 判断尾数够不够k个来取决end指针的位置
//这个判断好6啊,本来的if判断直接缩成一句了
int end = Math.min(ch.length - 1,start + k - 1);
while(start < end){
char temp = ch[start];
ch[start] = ch[end];
ch[end] = temp;
start++;
end--;
}
}
return new String(ch);
}
}
错误代码(不用看,理解错题目意思了)
/* public static String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
//System.out.println(ch);
//这个题典型的双指针的做法
int low=0;
int fast = k*2-1;
int length = s.length();
int end=fast;
while(low<fast&&fast<length){
//0-2k-1 2k-4k-1; 相差2k-
char temp = ch[fast];
ch[fast]= ch[low];
ch[low]= temp;
low++;
fast--;
//对于题目的情况,我们直接进行if语句进行判断就行
//剩余字符刚好2k个
if((low>=fast)&&end+2*k<length){
fast=end+2*k;
low=end+1;
end=fast;
}
// k到2k个
else if(low>=fast&&end+2*k>length&&end+k<length){
fast=end+k;
low=end+1;
end=fast;
}
//小于k个
else if(low>=fast&&end+k>length){
fast=length-1;
low=end+1;
}
//剩余字符刚好大于k小于2k个
}
return new String(ch);
} */
本文作者:TranquilGlow
本文链接:https://www.cnblogs.com/xuehaiqiule/p/17621628.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步