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

Java 检测两个字符串是否相差一个字符的最佳方法是什么?,java,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(ch

我有这个代码,但它看起来相当笨拙。在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);
}
public boolean oneDiff(字符串from,字符串s){
if(from.length()!=s.length())返回false;
整数差=0;

对于(int charIndex=0;charIndex不,这确实是最好的方法

没有任何内置功能,因为这不是您需要经常执行的操作。最接近的技巧是对两个整数进行异或运算,然后使用
位计数
获取汉明权重,以便检查它们共有多少翻转位:

Integer.bitCount(int1 ^ int2)

但是字符串没有类似的情况——这不是一种常见的情况,所以你必须自己编码。而且你的编码方式似乎很好——你真的必须循环每个字符。我想你可以缩短变量名并删除返回值周围的paren,但这只是表面现象。

我同意@mk。但是要最小化t循环执行在字符串结束之前不应运行循环。相反,只要差值大于1,就可以中断循环。如下所示:

用于(int-charIndex=0;charIndex 1)中断;
}
返回值(差异=1);

这将有助于循环优化,如果这是你想要的。

你至少可以优化你的解决方案,在for循环中返回false一次差异>1。你需要考虑一个字符串是单个字符的情况,或者是一个字符串添加到另一个字符串?FixString。;将为您提供词法对比,尽管我不确定这正是您想要的。
for (int charIndex = 0;charIndex<from.length();charIndex++) {
        if (from.charAt(charIndex)!=s.charAt(charIndex)) differences++;
        if(differences > 1) break;
    }
    return (differences==1);