一个数字串到另一个数字串的最小改动实现

问题描述

如何判断一串数字修改后的位数不超过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个");}}}

虽然代码有点多,但是最简单的思路。

时间: 2024-12-20 20:40:50

一个数字串到另一个数字串的最小改动实现的相关文章

算法设计,一个流水号,中间存在一个禁忌数,如何快速跳过这个数字

问题描述 算法设计,一个流水号,中间存在一个禁忌数,如何快速跳过这个数字 具体需求如下,一串数字(比如1235673),禁忌数为4,那么流水号的下一位应该直接跳过1235674,变成1235675.那么如果这串数字是39999999这样的情况,那么40000000-49999999都是不能出现的禁忌数.如何找到一个算法,快速的算出避开禁忌数的下一个数? 解决方案 用一数组表示这个流水号.即用一组整型数表示0-8,每次+1后将数组合成为整数.合成时0-3表示0-3,4-8 表示5-9 解决方案二:

一个防注入的强转数字函数

很多安全注入问题就是因为get方式提交的参数不进行过滤和处理的原因,阿里西西原创发布一个可以判断并强转为数字的函数,推荐收藏. 以下是函数代码:Function ChkInt(Para) '检测是否有效的数字   ChkInt=0  If Not (IsNull(Para) Or Trim(Para)="" Or Not IsNumeric(Para)) Then   If Para<0 then Para=0   If Para>2147483647 Then Para=

pat1019数字黑洞,有一个测试点过不去,大神们帮我看下哪错了?谢谢

问题描述 pat1019数字黑洞,有一个测试点过不去,大神们帮我看下哪错了?谢谢 #include <stdio.h> #include <stdlib.h> int comp(const void *a,const void *b){ return *(int*)a-*(int*)b; } int main(){ int n,a[4]={0},i,x,y; scanf("%d",&n); do{ i=0; while(n!=0){ a[i]=n%10;

visual studio 2010-如何用数组储存依次一串数的每个数字,如何数组中计数数字数

问题描述 如何用数组储存依次一串数的每个数字,如何数组中计数数字数 比如输入1010,怎么做让数组自动储存其中每个数,数组的数据类型应该是什么,然后如何统计数组里已经输了四个数?新手,谢谢. 解决方案 不用数组就可以了,我是用java的程序员,java中String,接收后,有自己的length属性,表示这个字符串有几个字符 解决方案二: 不用数组就可以了,我是用java的程序员,java中String,接收后,有自己的length属性,表示这个字符串有几个字符 解决方案三: #include

汇编语言-汇编一个程序小问题,输入数字9的时候,结果不正确,谢谢帮忙啦~~~

问题描述 汇编一个程序小问题,输入数字9的时候,结果不正确,谢谢帮忙啦~~~ DATA SEGMENT TABLE DB 00H,01H,04H,09H,16H,25H,36H,49H,64H,81H RSLT DB ? STRING DB 'please enter a number:','$' STRING1 DB 0DH,0AH,'the result is:$' DATA ENDS STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS CODE SEG

正则表达式-【已解决】正则 零宽断言 匹配一个单词后的第一个数字

问题描述 [已解决]正则 零宽断言 匹配一个单词后的第一个数字 比如 [CM][bt][02][03] 我想匹配 02 我的正则是这样写的: i)(?<=bCMb(D*)?)d+(?=D) 但无法匹配成功,请问该怎样改呢? 感谢各位! 正则本身没错...错的是 PCRE 8.34–8.35 UTF-8 does not support variable repetition inside lookbehind or alternatives of different lengths inside

富豪与屌丝之间仅隔了一个黑客距离,韩国最大数字货币交易所Bithumb被黑

本文讲的是富豪与屌丝之间仅隔了一个黑客距离,韩国最大数字货币交易所Bithumb被黑, 还记得今年5月韩国比特币交易网站Yapizon被黑,从而损失约合550万美元的事件吗?在经过评估后,平台决定将损失分摊到每一位用户身上,这倒霉的事,让计划投资数字货币的用户也是醉了.不过,不要以为事情就此了结.据报道,近日占有韩国比特币市场交易份额75.7%的Bithumb被黑客入侵,且损失已经达到数十亿韩元. Bithumb是世界五大比特币交易所之一,每天交易量超过13000比特币,约占全球比特币交易量的1

linux-Linux中怎么用grep找出一个文件中空白行的行数字=

问题描述 Linux中怎么用grep找出一个文件中空白行的行数字= 不知道为什么这样写# grep '^&' /etc/profile | wc -l找不出结果, 请问这个应该怎么写才是真确的? 解决方案 grep -E '^$' -n /etc/profile 解决方案二: 加上正则的参数,试试下面的命令 grep -e '^$' -n /etc/profile

【新人求助!】如何编写输入一个数字找0到这个数字范围内的所有偶数

问题描述 大神们帮帮忙吧,小的是才进入大一没几天的人,之前毫无基础,现在在gedit编写java格式的文件然后在terminal里check,但是很多都没有思路啊,如列出的以下:1.输入一个数字找0到这个数字范围内的所有偶数2.输入一系列数字找其中的最小正整数3.输入一个大于0的数字,在terminal里回复得到*的符号然后依次递减排成几排e.g.:输入:5得到:***************4.输入一个单词,得到单词的相反顺序,判断单词是否是回文e.g.:输入:apple得到:elppap.s

js实现input中输入数字每四位加一个空格

键盘各按键对应的数字 keycode 8 = BackSpace | keycode 9 = Tab   | keycode 12 = Clear keycode 13 = Enter   | keycode 16 = Shift  | keycode 17 = Control keycode 18 = Alt    | keycode 19 = Pause  | keycode 20 = CapsLock keycode 27 = Escape   | keycode 32 = Space