gpt4 book ai didi

java - 使用for循环获取2个字符串之间的汉明距离

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:29 24 4
gpt4 key购买 nike

在这个任务中,我需要得到两个字符串 sequence1 和 sequence2 之间的汉明距离(两个等长字符串之间的汉明距离是相应符号不同的位置数 - 来自维基百科)。

首先,我制作了 2 个新字符串,它们是 2 个原始字符串,但都使用小写字母以便于比较。然后我求助于使用 for 循环和 if 来比较 2 个字符串。对于这两对字符串中字符的任何差异,循环会将 1 添加到 int x = 0。该方法的返回值将是此 x 的值。

public static int getHammingDistance(String sequence1, String sequence2) {
int a = 0;
String sequenceX = sequence1.toLowerCase();
String sequenceY = sequence2.toLowerCase();
for (int x = 0; x < sequenceX.length(); x++) {
for (int y = 0; y < sequenceY.length(); y++) {
if (sequenceX.charAt(x) == sequenceY.charAt(y)) {
a += 0;
} else if (sequenceX.charAt(x) != sequenceY.charAt(y)) {
a += 1;
}
}
}
return a;
}

那么代码看起来是否足够好并且足够实用?我可以修复或优化代码吗?提前致谢。我是个菜鸟,所以如果我问了任何愚蠢的问题,请原谅我

最佳答案

从我的观点来看,以下实现是可以的:

public static int getHammingDistance(String sequence1, String sequence2) {
char[] s1 = sequence1.toCharArray();
char[] s2 = sequence2.toCharArray();

int shorter = Math.min(s1.length, s2.length);
int longest = Math.max(s1.length, s2.length);

int result = 0;
for (int i=0; i<shorter; i++) {
if (s1[i] != s2[i]) result++;
}

result += longest - shorter;

return result;
}
  1. 使用数组,避免了为每个需要比较的单个字符调用两个方法 (charAt);
  2. 避免当一个字符串比另一个长时出现异常。

关于java - 使用for循环获取2个字符串之间的汉明距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16260752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com