【问题标题】:Finding number of mismatches between two strings查找两个字符串之间的不匹配数
【发布时间】:2012-06-19 11:13:20
【问题描述】:

我需要找出两个字符串之间不匹配的字符数。目前我正在通过将字符串转换为 char 数组并逐个元素比较来做到这一点。

有没有其他方法可以达到上述要求。

注意:将字符串视为小写

输入:

输入

输出

输出:

2

【问题讨论】:

  • 还有其他方法,但没有更好的方法。
  • 请注意大小不一的单词。
  • 您的变体很好。你期望什么输出:“输入”“iAnput”?
  • 你真的只是想要不匹配的数量还是更高级的东西,比如单词之间的编辑距离?只是好奇...
  • 我同意。如果你比较a1234512345,你是有1个区别还是5个区别?您需要处理整个字符串并根据需要进行移位以对齐相似的连续字符。

标签: java string arrays mismatch


【解决方案1】:

Apache commons.lang 中的StringUtils 有一个method 用于获取两个字符串的Levenshtein 距离。

【讨论】:

  • 这很好,但肯定不是他想要的……除非可以手动设置运营成本并将“删除”和“插入”设置为非常高的值。但即便如此,开销也会很大。
  • @Baz,我认为它会更好,因为 Levenstein 距离定义了将一个字符串转换为另一个字符串所需的操作数,本质上,这就是 OP 正在做的事情
  • 但 levenstein 允许删除和插入。这不是 OP 想要的。他想要单词之间的汉明距离。这并不意味着,我个人不喜欢莱文斯坦
  • @Baz,同意,只是认为 OP 需要更清楚地定义他的目标 :)
  • @codeBrickie 谢谢..,但看起来其中一个字符串被修改以查找不匹配,输入字符串不应该改变
【解决方案2】:

如果两个字符串的大小不同,则以下代码将返回字母的完全不匹配。

你可以试试这个——

    String ip1 = "input"; // input1
    String ip2 = "utput"; // input2
    int count = 0; // difference in string
    String ipx2 = ip2;
    for (int j = 0; j <= ip2.length(); j++) {
        int value = ip1.indexOf(ipx2);
        if (value != -1) {
            if (("").equals(ipx2)) { // if the second string is blank after continous reducing
                count = ip1.length() + ip2.length();
            } else {
                count = ip1.length() + ip2.length() - 2 * ipx2.length();
            }
            break;
        } else {
            count = ip1.length() + ip2.length(); // if there is no match at all
        }
        ipx2 = ip2.substring(j);
    }
    System.out.println("" + count);
}

您必须检查输入是否有一些数据。我还没有做那个检查。

【讨论】:

    【解决方案3】:

    这是您描述的方式,但它是最简单的实现方式:

    int counter = 0;
    for(int i = 0; i < str1.length(); i++) if(str1.charAt(i) != str2.charAt(i)) counter++;
    

    它们只需两行代码即可,无需显式创建一个全新的字符数组。

    【讨论】:

    • 只有在两个字符串长度相同时才可以。添加这个... if (str1.length()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 2022-01-19
    • 2019-11-27
    • 1970-01-01
    相关资源
    最近更新 更多