在这个任务中,我需要在两个字符串sequence1和sequence2之间获得汉明距离(两个相等长度的字符串之间的汉明距离是相应符号与维基百科不同的位置数).
首先,我制作了2个新的琴弦,这是2个原始琴弦,但两者都采用了较低的表壳,使比较更容易.然后我使用for循环,如果要比较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; }