首页 > 解决方案 > 我的算法给我不正确的重复删除值有什么问题?

问题描述

我正在尝试删除字符串中的重复项,但我不确定为什么我的算法是错误的。它给了我一个输出,baa而不是bans正确的输出。

在尝试调试期间,我尝试将其切换ij内部sb.deleteCharAt();,但这给了我一个Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5 错误。

我做错了什么,我该如何解决?

这是我的代码:

public static void removeDuplicate(String s) {
    StringBuilder sb = new StringBuilder(s);

    for(int i = 0; i < s.length(); i++) {
        for(int j = i + 1; j < s.length(); j++) {
            if(s.charAt(i) == s.charAt(j)) {
                sb.deleteCharAt(i);
            }
        }
    }
    System.out.print("Duplicates have been, the resulting string is => " + sb);
}

public static void main(String[] args) {
    String s = "bananas";
    removeDuplicate(s);
}

标签: javastringalgorithmfor-loopchar

解决方案


有几件事是错误的。您应该在循环中与字符串生成器进行比较,而不是与字符串本身进行比较,因为它会发生变化。其次,您在删除时使用了错误的索引。这是正确的程序:

public static void removeDuplicate(String s) {
    StringBuilder sb = new StringBuilder(s);

    for(int i = 0; i < sb.length(); i++) {
        for(int j = i + 1; j < sb.length(); j++) {
            if(sb.charAt(i) == sb.charAt(j)) {
                sb.deleteCharAt(j);
            }
        }
    }
    System.out.print("Duplicates have been, the resulting string is => " + sb);
}

public static void main(String[] args) {
    String s = "bananas";
    removeDuplicate(s);
}

输出是:

重复了,结果字符串是 => bans


推荐阅读