A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-2-2 11:17 编辑

任意给定两个字符串,比如:
A:  00001001000001110000000000100001
B:  00101000000101110000010000100001
要求:按字面转换为字节数组,并且计算A和B的汉明距离(有多少位不同),程序执行时间最少为优胜者。

3 个回复

倒序浏览
本帖最后由 jy00228875 于 2013-1-29 02:39 编辑
  1. public class han2 {
  2. static String str1="00001001000001110000000000100001";
  3. static String str2="00101000000101110000010000100001";

  4. public static void main(String[] args) {
  5. System.out.print(getByteArr(str1,str2));

  6. }
  7. static int getByteArr(String str1,String str2){
  8. byte[] ba1=str1.getBytes();
  9. byte[] ba2=str2.getBytes();
  10. int count=0;
  11. for(int x=0;x<ba1.length;x++){
  12. if(ba1[x]!=ba2[x])
  13. count++;
  14. }
  15. return count;
  16. }
复制代码
做这题看错东西,以为是把字符串转成个二进制数再拿去比,然后算距离,后来准备回帖才发现转成字节数组,也顺便把这个二进制算的也贴出来

  1. public class han {
  2. static String str1="00001001000001110000000000100001";
  3. static String str2="00101000000101110000010000100001";
  4. public static void main(String[] args) {
  5. han h=new han();
  6. int b1=h.getBin(str1);
  7. int b2=h.getBin(str2);
  8. int b=b1^b2;
  9. System.out.println(getD(b));

  10. }
  11. public int getBin(String str){
  12. int bin=0;
  13. int length=str.length()-1;
  14. for(int x=0;x<str.length();x++){
  15. char a=str.charAt(x);
  16. int b=(int)a-48;
  17. if(b==1)
  18. bin=bin+(int)Math.pow(2, length-x);
  19. }
  20. return bin;
  21. }

  22. public static int getD(int b){
  23. int count=0;
  24. while(b>0){
  25. int getone=b%2;
  26. b=b/2;
  27. if(getone==1){
  28. count++;
  29. }
  30. }
  31. return count;

  32. }
  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
看了一下您的是用charAt函数拆分出每一位,然后进行对比。学习了
回复 使用道具 举报
本帖最后由 郭孟涛 于 2013-1-31 01:50 编辑
黄鸿达 发表于 2013-1-29 02:28
做这题看错东西,以为是把字符串转成个二进制数再拿去比,然后算距离,后来准备回帖才发现转成字节数组,也 ...

谢谢 {:soso_e181:}输出是4
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马