gpt4 book ai didi

java - 如何使用递归删除连续的重复项?

转载 作者:行者123 更新时间:2023-11-30 07:58:28 25 4
gpt4 key购买 nike

我需要使用递归方法从字符串中删除连续的重复项(例如,将“aabbcddeghhi”变成“abcdefghi”。)到目前为止我已经做到了。

如果我有removeDuplicates()注释行,我得到一个奇怪的输出,其中包含数字和此异常:

a195b197199d201203205207h209Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 13

如果我注释掉该行,它只会打印:

a

这是我的代码:

package recursion;

public class recursion {

public static void main(String[] args){
removeDuplicates("aabbcddefghhi", 0, 1);
}

public static void removeDuplicates(String a, int b, int c){
if (a.length() <= 1){
System.out.print(a.charAt(b));
}
else if (a.charAt(b) == a.charAt(c)){
System.out.print(a.charAt(c));
b++;
c++;
//removeDuplicates(a,b,c);
}
else if (a.charAt(b) != a.charAt(c)){
System.out.print(a.charAt(b) + a.charAt(c));
b++;
c++;
removeDuplicates(a,b,c);
}
else{
System.out.print("");
b++;
c++;
removeDuplicates(a,b,c);
}
}
}

最佳答案

这段代码有一些问题:

  1. 您没有终止递归的好方法。您实际上并没有减小字符串的大小,因此您的初始结束条件不起作用。
  2. 您没有根据此处使用的逻辑打印字符串最后一个字符的情况。
  3. 你的最终 if 条件永远不会发生
  4. 您永远不想将两个角色添加在一起。在这种情况下,您也不希望打印这两个字符。
  5. 如果两个字符匹配,您不想打印该字符,因为您不知道还有多少个字符。
  6. 您不需要有 c 值,它始终等于 b+1,只需使用一个数字即可。

以下是经过所有这些更改后的结果代码:

public static void main(String[] args) {
removeDuplicates("a");
System.out.println();
removeDuplicates("aabbcdddefghhii");
System.out.println();
removeDuplicates("aabbcdefa");
}

public static void removeDuplicates(String a) {
removeDuplicatesHelper(a, 0);
}

public static void removeDuplicatesHelper(String a, int b) {
if (b == a.length() - 1) {
System.out.print(a.charAt(b));
} else if (a.charAt(b) == a.charAt(b+1)) {
b++;
removeDuplicatesHelper(a, b);
} else {
System.out.print(a.charAt(b));
b++;
removeDuplicatesHelper(a, b);
}
}

输出:

a
abcdefghi
abcdefa

关于java - 如何使用递归删除连续的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32292890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com