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

前端之家收集整理的这篇文章主要介绍了java – 使用for循环获取2个字符串之间的汉明距离前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在这个任务中,我需要在两个字符串sequence1和sequence2之间获得汉明距离(两个相等长度的字符串之间的汉明距离是相应符号与维基百科不同的位置数).

首先,我制作了2个新的琴弦,这是2个原始琴弦,但两者都采用了较低的表壳,使比较更容易.然后我使用for循环,如果要比较2个字符串.对于这两对字符串中字符的任何差异,循环会将1加到int x = 0.方法的返回值将是此x的值.

  1. public static int getHammingDistance(String sequence1,String sequence2) {
  2. int a = 0;
  3. String sequenceX = sequence1.toLowerCase();
  4. String sequenceY = sequence2.toLowerCase();
  5. for (int x = 0; x < sequenceX.length(); x++) {
  6. for (int y = 0; y < sequenceY.length(); y++) {
  7. if (sequenceX.charAt(x) == sequenceY.charAt(y)) {
  8. a += 0;
  9. } else if (sequenceX.charAt(x) != sequenceY.charAt(y)) {
  10. a += 1;
  11. }
  12. }
  13. }
  14. return a;
  15. }

那么代码看起来是否良好且功能如何?我能修复或优化代码的任何东西?提前致谢.我是一个巨大的菜鸟,如果我问任何愚蠢的话,请原谅我

解决方法

从我的观点来看,以下实现是可以的:
  1. public static int getHammingDistance(String sequence1,String sequence2) {
  2. char[] s1 = sequence1.tocharArray();
  3. char[] s2 = sequence2.tocharArray();
  4.  
  5. int shorter = Math.min(s1.length,s2.length);
  6. int longest = Math.max(s1.length,s2.length);
  7.  
  8. int result = 0;
  9. for (int i=0; i<shorter; i++) {
  10. if (s1[i] != s2[i]) result++;
  11. }
  12.  
  13. result += longest - shorter;
  14.  
  15. return result;
  16. }

>使用数组,避免为每个需要比较的单个char调用两个方法(charAt);>当一个字符串比另一个字符串长时,避免异常.

猜你在找的Java相关文章