我有这段代码,但看起来很笨重。在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);
}
答案 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,但这只是化妆品。