问题描述
如何判断一串数字修改后的位数不超过3个?就是我现在要写一个方法去判断一串数字最多只能修改3个数字,怎么实现?例如:有一个数字串7777777,修改后为:77777770000,新增了4个数字超过了3个,怎么去判断?如7777777修改后-->7777778-->允许如7777777修改后-->7777788-->允许如7777777修改后-->8777778-->允许如7777777修改后-->8887778-->不允许,修改字数超过3个如7777777修改后-->7777777000-->允许增加3个数字如7777777修改后-->777777700-->允许增加3个以内数字如7777777修改后-->777777-->允许减少3个以内数字如7777777修改后-->7777-->允许减少3个数字这个数字串的长度不定的,貌似能用最短路径算法去实现,哪位兄弟姐妹,能给个算法实现一下,最好在能讲解一下,本人万分感激.或者能讲解下最短路径的实现机制是怎么样的,真的很想知道~
解决方案
解决方案二:
想复杂了,试试这个publicclassT{publicstaticvoidmain(String[]args){Strings="7777777";Strings1="87777780";System.out.println(validate(s,s1));}publicstaticbooleanvalidate(Stringsrc,Stringobj){intlengthOfsrc=src.length();intlengthOfobj=obj.length();intt=lengthOfsrc-lengthOfobj;intr=0;if(Math.abs(t)>3)returnfalse;intn=t<0?lengthOfsrc:lengthOfobj;for(inti=0;i<n;i++){if((Integer.valueOf(src.charAt(i))-Integer.valueOf(obj.charAt(i)))!=0){r++;if((r+Math.abs(t))>3)returnfalse;}}returntrue;}}
解决方案三:
做了个小修改publicclassT{publicstaticvoidmain(String[]args){Strings="7777777";Strings1="87777780";System.out.println(validate(s,s1));}publicstaticbooleanvalidate(Stringsrc,Stringobj){intlengthOfsrc=src.length();intlengthOfobj=obj.length();intt=lengthOfsrc-lengthOfobj;intr=0;if(Math.abs(t)>3)returnfalse;intn=t<0?lengthOfsrc:lengthOfobj;for(inti=0;i<n;i++){if(String.valueOf(src.charAt(i)).equals(String.valueOf(obj.charAt(i)))){r++;if((r+Math.abs(t))>3)returnfalse;}}returntrue;}}
解决方案四:
实现的算法很简单,只要你去比对二个字符串的不同字符,做个循环,如果有不同的地方超过3次,说明修改过了三个字符,下面是我的demopackageOrder1;publicclassTest2{publicbooleanCompareStr(Stringstr1,Stringstr2){intlen1=str1.length();intlen2=str2.length();inttempLen=len1;if(tempLen>len2){tempLen=len2;}if(len1!=len2){if(Math.abs(len1-len2)>3){//如果有增或减大于3位,直接返回falsereturnfalse;}else{//增减不大于3位再进行判断,加上修改的是否有大于次intnum=Math.abs(len1-len2);for(inti=0;i<tempLen;i++){if(str1.charAt(i)!=str2.charAt(i)){num++;}}if(num>3){returnfalse;}}}else{intnum=0;for(inti=0;i<tempLen;i++){if(str1.charAt(i)!=str2.charAt(i)){num++;}}if(num>3){returnfalse;}}returntrue;}/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubStringstr1="abcd";Stringstr2="abcd1232";booleanflag=newTest2().CompareStr(str1,str2);if(flag){System.out.println("修改的次数不越过3个");}else{System.out.println("对不起,你的修改超过3个");}}}
虽然代码有点多,但是最简单的思路。