字符串匹配问题_c++子串匹配文件里的字符串并输出匹配到的字符串的后面 - CSDN
精华内容
参与话题
  • 题目是:输入两个字符串,输出字符串1中与字符串2最先匹配的内容,字符串2中可包含?,?可代表任何字符。已知字符串2不会全为?。 输入输出格式:输入:abcdefabcdeg,a?c??f 输出:abcdef 下述代码可...
  • 字符串匹配问题

    2019-11-16 19:43:39
    朴素字符匹配(也称暴力匹配) 主S: A B A B A B C 模式M: A B C i=0, j = 0;//初始化,从第一个字符比起 S[0] == M[0] ; I++,J++ S[1] == M[1]; I++,J++ S[2] != M[2]; 此时再从模式M第一个字符...

    朴素字符匹配(也称暴力匹配)

    主串S:     A B A B A B C

    模式串M: A B C

    i=0, j = 0;//初始化,从第一个字符比起

    S[0] == M[0] ; I++,J++

    S[1] == M[1]; I++,J++

    S[2] != M[2]; 此时再从模式串M第一个字符重新开始,与主串第二个字符往后一一再进行比较

    I = 2 – 2 + 1 = 1;

    S[1] != M[0] ; 这是主串中以第二个字符为头往后与M串不匹配,主串中的游标i再继续向下走,

     

    I = 1 – 0 + 1 = 2;J = 0;

    S[2] == M[0] ;

    I ++ ; J ++;

    S[3] == M[3] ; I++, J++;

    I = 4 – 2 +1 = 3;  J = 0;

    S[4] ==M[0]; I++; J++

    S[5] == M[5]; I++; J++

    S[6] == m[6] ; I++; J++

    匹配成功

    【可以试着找一下主串S的游标i与模式串M的游标 j 之间的关系。】

    i = i – j + 1;//这点很重要,一定要理解

    i = i-j回到主串s与主串m第一个字符比较的字符所在位置,发现不匹配,则s串从下一个字符开始,与m串重新比较,所以要再加1

    代码:

    #include<iostream>
    #include<cstring> 
    using namespace std;
    int NativeStringSearch( string s, string m);
    int main()
    {
    	string s ,m;
    	cin>>s>>m;
    	int idx = NativeStringSearch( s, m );
    	if (idx == -1)
    	{
    		cout<<"未匹配"; 
    		}	
    	else
    	{
    		cout<<"在"<<idx+1<<"位置匹配成功"<<endl; 
    	}
    	return 0; 
    }
    int NativeStringSearch( string s, string m)
    {
    	int i = 0;
    	int j = 0;
    	while (i < s.length() && j < m.length())
    	{
    		if ( s[i] == m[j] )
    		{
    			i++;
    			j++;
    		}
    		else 
    		{
    			i = i - j + 1;//i = i-j不匹配,回到s串这一轮比较的第一个字符,从s串下一个字符重新比较,再加1,开始下一轮比较 
    			j = 0;//下一轮重新比较,从m串第一个字符出发 
    		}
    	}
    	if (j == m.size()) 
    	return i - j;
    	return -1;
    }

    运行结果:

     

     

     

    展开全文
  • 字符串匹配问题

    2020-06-25 11:15:43
    现要求各位实现字符串通配符的算法。 要求: 实现如下2个通配符: *:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同) ?:匹配1个字符 输入: 通配符表达式; 一组字符串。...

     题目:

    问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
    要求:
    实现如下2个通配符:
    *:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
    ?:匹配1个字符
    输入:
    通配符表达式;
    一组字符串。
    输出:
    返回匹配的结果,正确输出true,错误输出false
     

    题解:

    当两个字符匹配的时候, 我们直接下一次匹配;

    当两个字符不匹配的时候,并且通配符串该字符为?,直接下一次匹配。

    当两个字符不匹配的时候,并且通配符串该字符为*,可能匹配0个,1个或者多个。

    其余,不匹配!

    代码:

    #include<iostream>
    #include<string>
    using namespace std;
    
    
    bool isMatch(const char* Wildchar,const char* Matchchar)
    {
    // 两个字符串都到达末尾,匹配成功
       if(*Wildchar=='\0'&&*Matchchar=='\0')
           return true;
    // 仅有一个到达末尾一定匹配失败
        if(*Wildchar=='\0'||*Matchchar=='\0')
            return false;
    //当两字符相等,或者通配符串字符为?,直接下一次匹配
        if(*Wildchar==*Matchchar)
           return isMatch(Wildchar+1,Matchchar+1);
        if(*Wildchar=='?')
            return isMatch(Wildchar+1,Matchchar+1);
     //  通配符串为*时
        if(*Wildchar=='*')
            return isMatch(Wildchar+1,Matchchar)||       //匹配0个字符
                   isMatch(Wildchar+1,Matchchar+1)||     //匹配1个字符
                    isMatch(Wildchar,Matchchar+1);       //匹配多个字符
     //其余情况   
        return false;
    }
    
    int main()
    {
        string  Wildstr,Matchstr;
        while(getline(cin,Wildstr))
        {
            getline(cin,Matchstr);
            if(isMatch(Wildstr.c_str(),Matchstr.c_str()))
                cout<<"true"<<endl;
            else
                cout<<"false"<<endl;
        }
        
        return 0;
    }

    题目:

     给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

    '.' 匹配任意单个字符
    '*' 匹配零个或多个前面的那一个元素
    所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

    说明:

    s 可能为空,且只包含从 a-z 的小写字母。
    p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。

    示例:

    输入:
    s = "ab"
    p = ".*"
    输出: true
    解释: ".*" 表示可匹配零个或多个('*')任意字符('.')。

    s = "aab"
    p = "c*a*b"
    输出: true
    解释: 因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。

    思路:

    本题,我看了几遍解,用动态规划比较好,虽然标记尴尬,不得不说,这题我得做一个月!

    直接上题解:

    使用一个 二维数组记录状态   dp[ i ][ j ]   用来表示s的前i个字符与p的前 j  个字符的匹配情况

    我们需要dp[0 ][0] 为true 作为初始状态

    在匹配的时候:

    如果 两个字符相等,dp[i][j]=dp[i-1][j-1]

    如果两个字符不相等,如果p串字符为   " .  ",则可以认为字符相等   dp[i][j]=dp[i-1][j-1]

    如果两个字符不相等,如果p串字符为   " * ",情况可能稍微复杂:

    即使前面有若干个字符,我们不必关心,数组已经记录了匹配的状态。我们现在关注红圈内的两个字符,都是字母且不相等,那么* 就不能进行匹配,即匹配0个

    那么 dp[i][j]=dp [i ][j-2]

    相等的时候:

    匹配多个字符的时候  dp[i][j]=dp [i -1][j]

    匹配0个字符的时候    dp[i][j]=dp[i][j-2]

    代码:

    bool isMatch(string s, string p) {
            if(p.empty())
              return s.empty();
             
    //加上个相同字符,处理更方便
              s=" "+s;
              p=" "+p;
    
              int lens=s.size();
              int lenp=p.size();
    
              vector<vector<bool>> dp(lens+1,vector<bool>(lenp+1,false));
              dp[0][0]=true;
               
              for(int indexs=1;indexs<lens+1;++indexs)
              {
                 for(int indexp=1;indexp<lenp+1;++indexp)
                 {
       // 两个字符相等或者p串字符为 " .  ",dp[i][j]=dp[i-1][j-1]
                     if(s[indexs-1]==p[indexp-1]||p[indexp-1]=='.')
                     {
                         dp[indexs][indexp]=dp[indexs-1][indexp-1];
                     }
                     else if(p[indexp-1]=='*')
                     {
    //两个字符,都是字母且不相等,那么* 就不能进行匹配,即匹配0个 那么 dp[i][j]=dp [i ][j-2]
                         if(s[indexs-1]!=p[indexp-2]&&p[indexp-2]!='.')
                               dp[indexs][indexp]=dp[indexs][indexp-2];
                         else
                         {
                             dp[indexs][indexp]=dp[indexs][indexp-2]||dp[indexs-1][indexp];
                         }
    
                     }
                 }
                  
              }
            return dp[lens][lenp];
        }

     

    第一题链接:

    https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036?tpId=37&&tqId=21294&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking

    第二题,正则表达式链接: 

    https://leetcode-cn.com/problems/regular-expression-matching/solution/zheng-ze-biao-da-shi-pi-pei-by-leetcode-solution/

    展开全文
  • 字符串匹配算法综述

    万次阅读 多人点赞 2018-07-22 21:45:46
    字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目。此算法通常输入为原字符串(string)和子串(pattern),要求返回子串在原字符串中首次出现的位置。比如原字符串为“ABCDEFG”,...

    字符串匹配算法综述

    字符串匹配算法综述:BF、RK、KMP、BM、Sunday

    字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目。此算法通常输入为原字符串(string)和子串(pattern),要求返回子串在原字符串中首次出现的位置。比如原字符串为“ABCDEFG”,子串为“DEF”,则算法返回3。常见的算法包括:BF(Brute Force,暴力检索)、RK(Robin-Karp,哈希检索)、KMP(教科书上最常见算法)、BM(Boyer Moore)、Sunday等,下面详细介绍。

    1 BF算法:

    暴力检索法是最好想到的算法,也最好实现,在情况简单的情况下可以直接使用:

    这里写图片描述
    首先将原字符串和子串左端对齐,逐一比较;如果第一个字符不能匹配,则子串向后移动一位继续比较;如果第一个字符匹配,则继续比较后续字符,直至全部匹配。
    时间复杂度:O(MN)

    2 RK算法:

    RK算法是对BF算法的一个改进:在BF算法中,每一个字符都需要进行比较,并且当我们发现首字符匹配时仍然需要比较剩余的所有字符。而在RK算法中,就尝试只进行一次比较来判定两者是否相等。
    RK算法也可以进行多模式匹配,在论文查重等实际应用中一般都是使用此算法。
    这里写图片描述
    首先计算子串的HASH值,之后分别取原字符串中子串长度的字符串计算HASH值,比较两者是否相等:如果HASH值不同,则两者必定不匹配,如果相同,由于哈希冲突存在,也需要按照BF算法再次判定。
    按照此例子,首先计算子串“DEF”HASH值为Hd,之后从原字符串中依次取长度为3的字符串“ABC”、“BCD”、“CDE”、“DEF”计算HASH值,分别为Ha、Hb、Hc、Hd,当Hd相等时,仍然要比较一次子串“DEF”和原字符串“DEF”是否一致。
    时间复杂度:O(MN)(实际应用中往往较快,期望时间为O(M+N))

    3 KMP算法:

    字符串匹配最经典算法之一,各大教科书上的看家绝学,曾被投票选为当今世界最伟大的十大算法之一;但是晦涩难懂,并且十分难以实现,希望我下面的讲解能让你理解这个算法。
    KMP算法在开始的时候,也是将原字符串和子串左端对齐,逐一比较,但是当出现不匹配的字符时,KMP算法不是向BF算法那样向后移动一位,而是按照事先计算好的“部分匹配表”中记载的位数来移动,节省了大量时间。这里我借用一下阮一峰大神的例子来讲解:
    这里写图片描述
    首先,原字符串和子串左端对齐,比较第一个字符,发现不相等,子串向后移动,直到子串的第一个字符能和原字符串匹配。
    这里写图片描述
    当A匹配上之后,接着匹配后续的字符,直至原字符串和子串出现不相等的字符为止。
    这里写图片描述
    此时如果按照BF算法计算,是将子串整体向后移动一位接着从头比较;按照KMP算法的思想,既然已经比较过了“ABCDAB”,就要利用这个信息;所以针对子串,计算出了“部分匹配表”如下(具体如何计算后面会说,这个先介绍整个流程):
    这里写图片描述
    刚才已经匹配的位数为6,最后一个匹配的字符为“B”,查表得知“B”对应的部分匹配值为2,那么移动的位数按照如下公式计算:
    移动位数 = 已匹配的位数 - 最后一个匹配字符的部分匹配值
    那么6 - 2 = 4,子串向后移动4位,到下面这张图:
    这里写图片描述
    因为空格和“C”不匹配,已匹配位数为2,“B”对应部分匹配值为0,所以子串向后移动2-0=2位。
    这里写图片描述
    空格和“A”不匹配,已匹配位数为0,子串向后移动一位。
    这里写图片描述
    逐个比较,直到发现“C”与“D”不匹配,已匹配位数为6,“B”对应部分匹配值为2,6-2=4,子串向后移动4位。
    这里写图片描述
    逐个比较,直到全部匹配,返回结果。
    下面说明一下“部分匹配表”如何计算,“部分匹配值”是指字符串前缀和后缀所共有元素的长度。前缀是指除最后一个字符外,一个字符串全部头部组合;后缀是指除第一个字符外,一个字符串全部尾部组合。以”ABCDABD”为例:
    “AB”的前缀为[A],后缀为[B],共有元素的长度为0;
    “ABC”的前缀为[A, AB],后缀为[BC, C],共有元素的长度0;
    “ABCD”的前缀为[A, AB, ABC],后缀为[BCD, CD, D],共有元素的长度为0;
    “ABCDA”的前缀为[A, AB, ABC, ABCD],后缀为[BCDA, CDA, DA, A],共有元素为”A”,长度为1;
    “ABCDAB”的前缀为[A, AB, ABC, ABCD, ABCDA],后缀为[BCDAB, CDAB, DAB, AB, B],共有元素为”AB”,长度为2;
    “ABCDABD”的前缀为[A, AB, ABC, ABCD, ABCDA, ABCDAB],后缀为[BCDABD, CDABD, DABD, ABD, BD, D],共有元素的长度为0。
    在计算“部分匹配表”时,一般使用DP(动态规划)算法来计算(表示为next数组)://这里我没看懂,理论上不用DP直接搜也行啊

            int* next = new int[needle.length()];
            next[0] = 0;
            int k = 0;
            for (int i = 1; i < needle.length(); i++)
            {
                while (k > 0 && needle[i] != needle[k])
                {
                    k = next[k - 1];
                }
                if (needle[i] == needle[k])
                {
                    k++;
                }
                next[i] = k;
            }

    时间复杂度:O(N)

    4 BM算法:

    在本科的时候,我一直认为KMP算法是最好的字符串匹配算法,直到后来我遇到了BM算法。BM算法的执行效率要比KMP算法快3-5倍左右,并且十分容易理解。各种记事本的“查找”功能(CTRL + F)一般都是采用的此算法。
    网上所有讲述这个算法的帖子都是以传统的“好字符规则”和“坏字符规则”来讲述的,但是个人感觉其实这样不容易理解,我总结了另外一套简单的算法规则:
    我们拿这个算法的发明人Moore教授的例子来讲解:
    这里写图片描述
    首先,原字符串和子串左端对齐,但是从尾部开始比较,就是首先比较“S”和“E”,这是一个十分巧妙的做法,如果字符串不匹配的话,只需要这一次比较就可以确定。
    在BM算法中,当每次发现当前字符不匹配的时候,我们就需要寻找一下子串中是否有这个字符;比如当前“S”和“E”不匹配,那我们需要寻找一下子串当中是否存在“S”。发现子串当中并不存在,那我们将子串整体向后移动到原字符串中“S”的下一个位置(但是如果子串中存在原字符串当前字符肿么办呢,我们后面再说):
    这里写图片描述
    我们接着从尾部开始比较,发现“P”和“E”不匹配,那我们查找一下子串当中是否存在“P”,发现存在,那我们就把子串移动到两个“P”对齐的位置:
    这里写图片描述
    已然从尾部开始比较,“E”匹配,“L”匹配,“P”匹配,“M”匹配,“I”和“A”不匹配!那我们就接着寻找一下子串当前是否出现了原字符串中的字符,我们发现子串中第一个“E”和原字符串中的字符可以对应,那直接将子串移动到两个“E”对应的位置:
    这里写图片描述
    接着从尾部比较,发现“P”和“E”不匹配,那么检查一下子串当中是否出现了“P”,发现存在,那么移动子串到两个“P”对应:
    这里写图片描述
    从尾部开始,逐个匹配,发现全部能匹配上,匹配成功~
    时间复杂度:最差情况O(MN),最好情况O(N)

    5 Sunday算法:

    后来,我又发现了一种比BM算法还要快,而且更容易理解的算法,就是这个Sunday算法:
    这里写图片描述
    首先原字符串和子串左端对齐,发现“T”与“E”不匹配之后,检测原字符串中下一个字符(在这个例子中是“IS”后面的那个空格)是否在子串中出现,如果出现移动子串将两者对齐,如果没有出现则直接将子串移动到下一个位置。这里空格没有在子串中出现,移动子串到空格的下一个位置“A”:
    这里写图片描述
    发现“A”与“E”不匹配,但是原字符串中下一个字符“E”在子串中出现了,第一个字符和最后一个字符都有出现,那么首先移动子串靠后的字符与原字符串对齐:
    这里写图片描述
    发现空格和“E”不匹配,原字符串中下一个字符“空格”也没有在子串中出现,所以直接移动子串到空格的下一个字符“E”:
    这里写图片描述
    这样从头开始逐个匹配,匹配成功!
    时间复杂度:最差情况O(MN),最好情况O(N)

    //实际我写好像可以是o(M+N)啊。。

    代码粘一下:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    char a[10005],b[10005];//long a>long b
    int c[30];//表示b串中存在的字母;不存在则为1,存在为最靠后的此字符距离尾部加一(要跳的地方) 
    int la,lb;//字符串a,b的长度 
    int head;//当前搜索到的头字符 
    int main()
    {
        scanf("%s",a);
        scanf("%s",b);//read in
        la=strlen(a);
        lb=strlen(b); 
        for(int i=0;i<=lb-1;i++)
            c[b[i]-'a'+1]=lb-i;//初始化c数组 
        for(int i=0;head<=la-1;)//i表示当前匹配长度 ,head指针跳到a尾时结束 
        {
            if(a[head+i]==b[i])
            {
                i++;//匹配则更新i值
                if(i==lb) //匹配到的长度等于b串长度 则成功 
                {
                    printf("Yes");return 0;
                }
            }        
            else
            {
                if(c[a[head+lb]-'a'+1]!=0) head=head+c[a[head+lb]-'a'+1];//判断是否出现
                else head=head+lb+2; //未出现,跳到下一个长度 
                i=0;//匹配值更新为0
            }         
        }
        printf("No");
        return 0;
    }
    展开全文
  • select v.spid spid,v.appid appid,v.version version,v.newversion newversion,v.status status,v.createtime createtime from adc_spversionchangeapply v inner join adc_application a on a.id=v.appid w

        select v.spid spid,v.appid appid,v.version version,v.newversion newversion,v.status status,v.createtime createtime from adc_spversionchangeapply v inner join adc_application a on a.id=v.appid
        where a.create_by = 'a' and v.appid = '12000000005' and  (v.createtime >= '1987-05-06') and (v.createtime <= '2009-04-29')

     

    加入v.createtime在数据库中试date类型  那么会跑出异常

     

    ORA-01861: 文字与格式字符串不匹配

     

     

    实际上是因为 '1987-05-06'是字符串类型导致的date类型与字符串类型 件跨类型比较 所以是有问题的

    将'1987-05-06'  写成to_date('1987-09-18','yyyy-mm-dd')

    就行了

    代码如下

        select v.spid spid,v.appid appid,v.version version,v.newversion newversion,v.status status,v.createtime createtime from adc_spversionchangeapply v inner join adc_application a on a.id=v.appid
        where a.create_by = 'a' and v.appid = '12000000005' and  (v.createtime >= to_date('1987-05-12','yyyy-mm-dd')) and (v.createtime <= to_date( '2009-04-29','yyyy-mm-dd')

    展开全文
  • str),表示后面不是接str才匹配前面的字符串。如we(?!123)会匹配welcome中的we,但不匹配we123中的we。所以(?!str)的前面不要有字符串就表示不以str开头了。 因此我们若想要匹配由26个小写字母组成,但不以ab字符串...
  • 正则表达式匹配任意字符串

    千次阅读 2018-09-20 22:48:16
    ) 匹配所有字符串   &lt;p class="num"&gt;9033&lt;/p&gt; 如使用&lt;p class="(.*?)"&gt;9033&lt;/p&gt; 会得到num   但是如果带换行符会失效,...
  • 今天同事问了我一个关于正则表达式 的问题,他提出的问题是:想匹配不包括“TWN”,"HKG","MAC"的字符串。 最后写出的表达式为:^(?!(HKG|MAC|TWN))[A-Z]{3}$ 上面表达式意思是匹配字符串中不包含HKG、MAC...
  • 刚开始用oracle,今天把字符串数据传递到mapper文件中执行的时候遇到了文字与格式字符串匹配这个错误 这是由于给的字符串和要转换的日期格式不一样导致的 例如 select to_date('2018-3-9 0:00:00','yy/mm/dd') ...
  • 正则表达式排除特定字符串

    万次阅读 2014-05-17 17:21:52
    1.例子,查找不以baidu开头的字符串。 baidu.com sina.com.cn 正则:^(?!baidu).*$ 匹配结果就是第2行,也就是第1行被排除了 这里使用了零宽度断言(?!exp),注意,我们有一个向前查找的语法(也叫顺序环视) (?=...
  • 经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤”hede”字串,但这种写法是错误的。我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的...
  • Linux shell 字符串匹配

    千次阅读 2015-01-02 13:42:55
    最近进行脚本学习的时候,遇到了字符串匹配问题,网上的内容也很乱,在这里我就写一个简单可行的方法吧。  首先假设一个场景:在一个文件夹里有很多后缀为sh的文件,那我怎么移动除了指定的某些文件之外文件到...
  • Java中用正则表达式截取字符串

    万次阅读 2017-12-17 13:27:44
    正则表达式在匹配字符串的过程中应用广泛,如果能够熟练掌握正则表达式,在学习工作中解决字符串相关问题可以事半功倍。 java.util.regex 包下的Pattern和Matcher类提供了Java中正则表达式的解决方案。 指定为字符串...
  • Python正则表达式在使用中会经常应用到字符串替换的代码。有很多人都不知道如何解决这个问题,下面的代码就告诉你其实这个问题无比的简单,希望你有所收获。 1.替换所有匹配的子串用newstring替换subject中所有与...
  • 在源字符串“You may be out of my sight, but never out of my mind.”中查找“my”的个数。输出:匹配个数为2 三种方法: 1.通过String的indexOf方法 2. 通过正则表达式 3. 通过String的split方法 其中第一种方法...
  • java字符串模糊匹配

    万次阅读 2013-04-11 16:23:50
    今天因为业务需求,需要在java中进行字符串的模糊匹配,由于要比较的对象长度不同,也没有固定的组成规则,收集到下列三个方法解决问题  方法一、   public intindexOf(String str)  返回指定子字符串在此...
  • 正则表达式匹配固定个字符

    千次阅读 2018-11-20 22:56:00
    正则表达式匹配固定个字符 查找了很多都没有找到答案,最后在知乎上找到了。 问题:怎么使用匹配正则表达式匹配两个相同的字母,而不要匹配三个相同的字母? 比如使用正则表达式匹配“aa”,出现baab时可以匹配其中...
  • 正则表达式匹配任意字符

    万次阅读 多人点赞 2019-04-09 15:32:21
    最开始以为.* 可以匹配任意字符,后来发现有问题匹配不了换行符\n 查了下资料,用[\s\S]*匹配可以  解释:\s空白符,\S非空白符,所以[\s\S]是任意字符
  • Qt中QString中字符匹配问题

    千次阅读 2014-05-25 20:51:06
    关于QString中的
  • 已知两个字符串,计算这两个字符串匹配程度,如果字符串完全一样则输出1,如果字符串没有一个字母相同则输出0,否则利用公式:(max + max) / (len1+len2)计算匹配程度,其中max表示两个字符串对齐时最多可能对应...
1 2 3 4 5 ... 20
收藏数 386,562
精华内容 154,624
关键字:

字符串匹配问题