检测两个字符串是否有一个字符的最佳方法是什么?

时间:2015-03-13 18:18:29

标签: java

我有这段代码,但看起来很笨重。在Java中有更规范的方法吗?

public boolean oneDiff(String from, String s) {
    if (from.length()!=s.length()) return false;
    int differences = 0;
    for (int charIndex = 0;charIndex<from.length();charIndex++) {
        if (from.charAt(charIndex)!=s.charAt(charIndex)) differences++;
    }
    return (differences==1);
}

2 个答案:

答案 0 :(得分:2)

我同意@mk。但是,为了最小化循环执行,您不应该运行循环直到字符串结束。相反,你可以在差异大于1时立即打破循环。像这样:

for (int charIndex = 0;charIndex<from.length();charIndex++) {
        if (from.charAt(charIndex)!=s.charAt(charIndex)) differences++;
        if(differences > 1) break;
    }
    return (differences==1);

如果这是您想要的,这将有助于通过循环优化更快地执行。

答案 1 :(得分:1)

不,这真是最好的方式!

没有任何内置功能,因为这不是您经常需要做的事情。最接近的技巧是对两个整数进行xor,然后使用bitCount得到汉明权重,以检查它们共有多少个翻转位:

Integer.bitCount(int1 ^ int2)

但对于Strings来说并不是那样 - 它不是常见的情况,所以你必须编写自己的代码。而你编码的方式似乎很好 - 你真的必须遍历每一个角色。我想你可以缩短变量名称并删除返回周围的parens,但这只是化妆品。