C#实现字符串匹配算法

算法练习—c#实现字符串匹配 题目: 从一个长字符串中检索出短字符串的第一个索引 输入:(ababcd,ab) 输出:0 输入(ainflagfd,flag) 输出:3 注意,不能使用类似于 Contains 之类的字符串操作函数,需要手写按字符匹配的函数。 解答: using System; namespace ConsoleApp1 { class Program { /*测试用例 (ababcd,ab) (ainflagfd,flag)... 阅读详情

最近在学习算法。刚学习完字符串匹配的几种算法:BF算法、MP算法:KMP算法,BM算法和BMH算法。参考的书籍是算法之美,原书的代码都是用C++写的。我不懂C++,只学过C#,这里就用C#做个总结(自己是个菜鸟,表达错误的地方,希望大家指正)。

1、BF算法

 BF算法实现原理是:从主串和模式串的首位置开始,依次比较主串和模式串的各个位置,如果匹配错误,主串就返回第二个位置,模式串返回首位置,重新匹配。以此类推,直到模式串匹配成功,返回匹配成功的位置。如果没有发生匹配就返回-1。

代码如下:

 public static  int MatchStr(string s1, string s2,int n)
        {
            int i = n-1, j = 0;            
//n为匹配的起始位置
            bool IsMatch=false ;            
            while (!IsMatch)
            {
            if (s1[i] == s2[j])             
                {                 
                    i++;
                    j++;                  
                }
                else                        
                {
                    i = i - j + 1;
                    j = 0;
                }
 //如果模式串匹配成功,j++,就会得到模式串长度的值。
                if (j == s2.Length)         
                {
                    IsMatch = true;
                    n = i - j+1;                   
                } 
            }
   

  if (IsMatch)
            {
                Console.WriteLine("普通方法匹配成功");
            }
            else
            {
                n = -1;
                Console.WriteLine("普通方法匹配失败");
            }       
            return n;
        }

2、MP算法

 BF算法一旦匹配失败,i,j的值就会频繁的回溯,导致复杂度增大。MP算法避免的i值回溯,只利用j值的回溯进行匹配。

MP算法原理:模式串与主串进行匹配,进行到i处(模式串在j处)发现不匹配,如果模式串j处之前有前缀n个字符与主串i处

之前n个字符相匹配,则可将模式串j移动到n处,重新与i进行匹配(此时i的位置不变)即可。依次类推,直到匹配结束。

 现在的问题就是求n的值为多少。

 假设模式串与主串在i处不匹配(模式串在j处),那么说明主串的s1[i-j~i-1]的子串与模式串的s2[0~j-1]是匹配成功的。那么寻找

主串i之前的n个字符,等价于寻找模式串j之前的n个字符与模式串的前缀n个字符是相匹配的,即n的值与主串无关,只与模式串自

身的j位置有关。n的计算方法计算如下:假定模式串为(ababcabababc)

当j=0时,代表第一个字符就匹配失败,规定此时n为-1;
当j=1时,代表第二个字符匹配失败。此时n为0;
当j=2时,则是在aba处匹配失败,前面并不能找到合格的n。则n为0;
当j=3时,则是在abab处匹配失败,则首字母a与j-1处的a是匹配的,则此时n为1;
当j=4时,则是在ababc处匹配失败,则前缀ab,与j-2~j-1处ab匹配,则此时n为2;
......
我们发现,j处的n值与j-1处的n值有关。
推理如下:
假设j-1处匹配失败,值为n,意思是:s2[0~n-1]=s2[j-1-n~j-2]。
若在j处匹配失败,有两种情况:
情况1:s2[j-1]=s2[n],那么s2[0~n]=s2[j-1-n~j-1],此时可得到j处匹配失败的n值为n+1;
情况2:s2[j-1]!=s2[n]。那么说明匹配成功的前缀字符一定不是n+1,但是会不会有更小的前缀字符匹配成功。
已经知道在j-1处的值为n,说明匹配成功的前缀字符为n,那么s2[n]处的匹配成功的前缀字符m,必定也是j-1处的匹配成功的前缀
s2[j-1]=s2[m],那么j处匹配失败的n值为m+1。否则n的值就依次循环到字符开始。
......
此时各处的n值组合起来就是next[]数组,在匹配过程中,若在j处匹配失败,就把模式串移动next[j]个位置,重新与主串i匹配就可以了。

实现MP算法中next[]数组的代码如下:
 private static  int[] MpNext(string s1)   //s1为模式串
        {
            int[] next = new int[s1.Length + 1];  //数组的长度可以为s1.length,这里为s1.length+1,在多次匹配中才有意义。
            int i = 1, j = 0;
            next[0] = -1;
            next[1] = 0;
            while (i < s1.Length)
            {
                if (j==-1||s1[i] == s1[j])        //j==-1的条件是为了避免i=0时候,next[0]=-1,造成的下标越界
                {
                    i++;                          
                    j++;
                    next[i] = j;
                }
                else
                {
                    j = next[j];
                }
            }
            
            return next;

        }


利用MP算法进行匹配的代码如下:
 public static int MpMatchStr(string s1, string s2, int n)
        {
            int[] next = MpNext(s2);
            int i = n - 1,j = 0;
            bool IsMatch = false ;
            while (!IsMatch)
            {
                if (j == -1 || s1[i] == s2[j])  
                {       
                    i++;
                    j++;
                }
                else
                {
                                    
                    j = next[j];
                   
                }
                if (j == s2.Length)
                {
                    IsMatch = true;
                    n = i - j + 1;             
                } 
            }
           
            if (IsMatch)
            {
                Console.WriteLine("MP方法匹配成功");
            }
            else
            {
                n = -1;
                Console.WriteLine("MP方法匹配失败");
            }
            return n;
        }

3、KMP算法
KMP算法是由MP算法发展过来的。同样是借助一个next[]数组。但是next[]数组的n的值有一点不同。

KMP算法原理基本上与MP相同。不同处在于:如果主串中的i处与模式串j处不匹配,且MP算法的next[j]为n,
则下一次匹配则为主串中的i处与模式串中的n处进行匹配。但是若模式串n处的值与j处的值相等,则主串中的i处
必然不等于n处,所以此处next[j]的值可以修正为一个更小的值m。

实现KMP算法中next[]数组的代码如下:
 private  static int[] KmpNext(string s1)
        {
            int[] next = new int[s1.Length + 1];
            int i = 1, j = 0;
            next[0] = -1;
            next[1] = 0;
            while (i < s1.Length)
            {
                if (j == -1 || s1[i] == s1[j])
                {
                    i++;
                    j++;
                    if (i < s1.Length && s1[i] == s1[j])
                    {
                        next[i] = next[j];
                    }
                    else
                    {
                        next[i] = j;
                    }
                }
                else
                {
                    j = next[j];
                }
            }


            return next;
        }

利用KMP算法匹配字符串的代码与MP的代码一致。

4、BM算法

BM算法与KMP算法的很大区别在于,KMP算法是从左往后开始匹配,而BM算法则是从右往左进行匹配。
BM算法原理:利用坏字符数组和好后缀数组进行匹配。那么什么叫坏字符数组和好后缀数组呢。假设主串的n+s2.length与模式串的s2.length开始匹配。若匹配到主串的i处(模式串的j处)失败,此处主串i处字符便称为坏字符,则会有两种情况。
第一种情况:坏字符从未在模式串中出现,那么直接将模式串的开始位置对准i+1处,重新进行匹配。即主串的i+s2.length处与模式串的s2.length开始匹配。
第二种情况:坏字符在模式串的j处之前的m处出现,则可将模式串的m处与主串的i处对齐,重新进行匹配,即主串的i+s2.length-m-1处与模式串的s2.length开始匹配。
那么什么是好后缀数组呢。同样假设主串的n+s2.length与模式串的s2.length开始匹配。若匹配到主串的i处(模式串的j处)失败,若模式串j+1之后的后缀在j之前出现过,那么这个后缀就称为好后缀。则会有三种情况出现:
第一种情况:好后缀在j的前面m处出现过。那么将模式串向右移动s2.length-j-1+m,使好后缀与主串好后缀对齐。然后从主串的s2.length-j-1+m+i处与模式串的s2.length进行匹配。
第二种情况:模式串j+1之后的后缀在j之前并没有出现过,但是有更短的后缀,同时是模式串的前缀,那么这个也是好后缀,假设这个后缀的长度为s,可以将模式串的前缀与主串的好后缀对齐,然后从主串的s2.length+j+i+1-s处与模式串的s2.length处开始匹配。
第三种情况:不存在好后缀。

所以如果一旦匹配,那么可以根据坏字符和好后缀得到两个模式串移动的数值,取其最大的数值进行模式串移动则可以大大的提高匹配的效率。

首先对于坏字符数组:bmBc[]:
对于第一种情况:如果模式串不存在坏字符,那么bmBc[坏字符]就是s2.length;
对于第二种情况:如果模式串距离j最近的m处存在坏字符,那么bmBc[坏字符]就是s2.length-m-1。
那么依据坏字符数组,每次匹配失败后,重新匹配时,主串i的位置就是i+bmBc[坏字符]。

坏字符数组bmBc[]的代码实现:
private static int[] BmbmBc(string s1)
        {
            int[] bmBc = new int[256];            
 //这里为ASCII码中的256个字符,因为不能预知模式串中的字符
            for (int i = 0; i < bmBc .Length ; i++)
            {
                bmBc[i] = s1.Length;                //首先把所有值赋值为模式串的长度。
            }
            for (int i = 0; i < s1.Length-1 ; i++)
            {
                bmBc[s1[i]] = s1.Length - i -1;     //依次计算模式串中字符的bmBc值。
            }
            return bmBc;
        }

对于好后缀数组:bmGs[]:
对于情况一:好后缀的长度是知道的,为s2.length-j-1,但是在j前何处出现好后缀并不知道。可以依据循环的对比方式取得模式串移动的距离。(详见代码)
对于情况二:好后缀的长度是不知道,但是一定比s2.length-j-1,此时好后缀的位置也是可以确定的,模式串的开头和结尾。
对于情况三:不存在好后缀,则bmGs[]的值为s2.length。

坏字符数组bmGs[]的代码实现:
 private static int[] BmbmGs(string s1)
        {
            int[] bmGs = new int[s1.Length] ;
            


            for (int i = s1.Length -1; i > 0; i--) 
            {
                for (int s = i - 1; s >= 0; s--)      
//对于第一种情况,s代表出现好后缀的位置
                {


                    if (s1[s] != s1[i])          
  //s1[i]处与主串是不匹配的,所以要找与s1[i]不同的值
                    {
                        if (i ==s1.Length - 1)    
 //此时是末尾第一个字符就不匹配
                        {
                            bmGs[i] = i - s;
                        }
                        for (int k = i+1; k <s1.Length; k++)
                        {
                            if (s1[k - i + s] != s1[k]) break;  /
/好后缀匹配失败,跳出
                            else
                            {
                                if (k ==( s1.Length - 1))    
  //好后缀匹配成功
                                {
                                    bmGs [i] =i - s;
                                }
                            }
                        }
                    }
                    if (bmGs[i] > 0) break;                
//表示已经取得了一个好后缀的最小移动位置,就不用继续循环了
                }


                if (bmGs[i] == 0)                          
//对应于第二种情况。第二种情况是第一种情况失败后开始的
                {
                    for (int k = Math.Min(s1.Length - 1 - i, i); k > 0; k--)  
//k代表好后缀长度,好后缀一定比 s1.Length-1-i、i都小
                    {
                        int x = s1.Length - 1, y = k - 1;      
//x,表示模式串尾部。
                        while (s1[x] == s1[y])
                        {
                            if (y == 0)                        
//好后缀匹配成功
                            {
                                bmGs[i] = s1.Length - k;
                                break;
                            }
                            x--;
                            y--;
                        }


                    }
                    if (bmGs[i] == 0)                        
  //代表第三种情况。一二种情况都没出现。
                    {
                        bmGs[i] = s1.Length;
                    }
                }
            }
   return bmGs;
        }

利用BM算法实现字符串匹配的代码:

 public static int BmMatchStr(string s1, string s2, int n)
        {
            int[] bmBc = BmbmBc(s2);
            int[] bmGs = BmbmGs(s2);
            int x=n+s2.Length -2;
            int y=s2.Length -1;
            bool IsMatch = false;
            while (!IsMatch)
            {
                if (s1[x] == s2[y])
                {
                    if (y == 0)
                    {
                        IsMatch = true;
                        n = x+1;
                    }
                    x--;
                    y--;
                }
                else
                {
                    int offset = Math.Max(bmBc[s1[x]], bmGs[y]);      
 //偏移的最大值
                    x += offset;
                    y = s2.Length - 1;                
                }
                
            }
            if (IsMatch)
            {
                Console.WriteLine("BM方法匹配成功");
            }
            else
            {
                n = -1;
                Console.WriteLine("BM方法匹配失败");
            }
          
            return n;
        }

5、BMH算法
BMH算法算是BM算法的一个简化。BMH仅仅是依靠坏字符数组进行模式串的移动。略微不同的是,无论在何处匹配失败,
都会依照主串中已经完成匹配的子串最右端的字符作为坏字符进行移动。坏字符数组代码同BM算法。BMH算法匹配字符串略。


测试:
 static void Main(string[] args)
        {
            string s1 = "GCATCGCAGAGAGTATACAGTACG";
            string s2 = "GCAGAGAG";
            
            int n = Program.MatchStr(s1, s2, 1);
            Console.WriteLine("普通方法匹配的位置为:" + n);
            
            int m = Program.MpMatchStr(s1, s2, 1);
            Console.WriteLine("MP方法匹配的位置为:" + m);
            
            int x = Program.MpMatchStr(s1, s2, 1);
            Console.WriteLine("KMP方法匹配的位置为:" + x);
            
            int y = Program.BmMatchStr(s1, s2, 1);
            Console.WriteLine("BM方法匹配的位置为:" + y);
      
        }

 

 结果如下:



字符串匹配算法实现C# KMP算法是一种高效的字符串匹配算法,它利用了模式串中的部分匹配信息,避免了不必要的比较操作。这篇文章介绍了三种常见的字符串匹配算法:简单匹配算法、KMP算法和Boyer-Moore算法,并提供了它们的C#实现。通过了解和实践这些算法,您可以更好地理解字符串匹配的原理和实现,从而在实际应用中选择适合的算法来解决问题。它的思想很简单:从文本的第一个字符开始,逐个比较模式串和文本串的字符,如果发现不匹配的字符,则将文本串向后移动一位,继续比较下一个位置。如果找到了完全匹配的子串,则返回匹配的起始位置。 阅读详情

相关推荐

正则表达式模式匹配字符串基础知识(C#实现

正则表达式是一种强大的文本模式匹配工具,它可以用于在字符串中查找、替换和验证特定的模式。通过上述示例代码,我们可以学习如何使用C#中的正则表达式进行字符串的模式匹配、替换和验证。正则表达式是一项非常强大和灵活的技术,可以在文本处理中发挥重要作用,帮助我们处理各种复杂的匹配需求。上述代码创建了一个正则表达式对象,用于匹配形如"XXX-XXXX"的字符串,其中X表示数字字符。上述代码在输入字符串中查找匹配正则表达式模式的子字符串。上述代码将输入字符串匹配正则表达式模式的子字符串替换为指定的字符串

techDM的博客 890

StringDistance:用于模糊字符串比较和匹配C# iImplementations 的集合

#字符串距离 这些是不同“编辑距离”或模糊字符串比较算法C# 实现。 莱文斯坦距离 两个单词之间的 Levenshtein 距离是将一个单词更改为另一个单词所需的最小单字符编辑(插入、删除、替换)次数。 短语编辑距离通常用于特指 Levenshtein 距离。 它以弗拉基米尔·莱文施泰因 (Vladimir Levenshtein) 的名字命名,他在 1965 年考虑了这个距离。 var calc = new LevenshteinDistanceCalculator(); var distance = calc.Distance("Hello, world!", "Hello, Arnold!"); // 4 distance为 4: 1 删除 ( r ) 1 替换 ( w -> n ) 2 加法 ( A , r ) Damerau-Levenshtein 距离 Damer

C#中使用正则表达式进行字符串匹配和替换操作是非常常见的

Regex类是C#中用于处理正则表达式的类库之一,提供了丰富的功能和方法来满足各种字符串处理需求。Replace方法将input字符串中所有匹配的模式替换为replacement指定的字符串,并返回替换后的结果。以上就是一些常用的C# Regex类的用法示例。使用Regex.Replace方法可以将匹配的模式替换为指定的字符串。以下是一个示例,演示如何使用Regex.Replace方法将一个字符串中的所有空格替换为下划线。使用Regex.Match方法可以从一个输入的字符串中搜索并返回第一个匹配的模式。

Meta_C的博客 1012

C# 使用正则表达式

正则表达式是一种用于匹配和处理文本的强大工具,常用于字符串的搜索、替换、验证等操作。在C#中,可以使用命名空间提供的类来处理正则表达式。正则表达式由一系列字符和特殊字符组成,用于定义模式或规则,用于匹配和操作字符串。它具有灵活、强大的模式匹配能力,可以根据特定的模式对文本进行高效的搜索和操作。?[]()\d\w\s在C#中,可以使用Regex类来创建正则表达式对象,并使用其方法进行匹配、搜索、替换等操作。MatchMatchesReplaceSplit上述代码使用正则表达式\b\w+

微软技术分享 2万+

C# 实现 Rabin-Karp 字符串匹配算法

本文介绍了如何使用 C# 实现 Rabin-Karp 字符串匹配算法。该算法通过比较字符串的哈希值来确定是否匹配,并且具有较好的时间复杂度。通过实现代码,我们可以在 C# 中轻松地应用该算法进行字符串匹配操作。Rabin-Karp 算法是一种常用的字符串匹配算法,它通过哈希函数快速比较字符串的哈希值来确定是否匹配。在本文中,我们将使用 C# 编程语言来实现 Rabin-Karp 字符串匹配算法。Rabin-Karp 算法的核心思想是利用哈希函数来计算字符串的哈希值,并通过比较哈希值来确定字符串是否匹配

qq_37934722的博客 179

C# 实现多模式字符串匹配算法

AC 自动机算法是由 Aho 和 Corasick 于 1975 年提出的,它是一种能够同时匹配多个模式串的字符串匹配算法。AC 类是 AC 自动机的实现类,包含了将模式串添加进 AC 自动机、构建 AC 自动机的失败指针和在文本串中搜索模式串的方法。多模式字符串匹配算法的基本思路是对每个模式串构建一个自动机,然后在文本串中沿着自动机进行匹配。多模式字符串匹配算法是一种用于在文本串中查找多个模式串的高效算法。常见的多模式字符串匹配算法有 AC 自动机算法和 Trie 树算法。本文将介绍 AC 自动机算法

AnBig_Data的博客 388

使用C#语言实现Knuth-Morris-Pratt字符串匹配算法

具体来说,当在主字符串中搜索到某个字符与模式字符串匹配时,KMP算法不会从下一个字符重新开始搜索,而是利用已知的前缀和后缀信息跳过一些字符,直接从某个位置开始搜索。Knuth-Morris-Pratt(KMP)算法是一种经典的字符串匹配算法,相比于朴素的字符串匹配算法,在长字符串匹配字符串时具有更高的效率。,然后遍历主字符串,在每个位置i进行匹配。如果匹配失败,则利用已知的最长公共前后缀信息跳过一些字符,重新开始匹配。总结:使用C#语言实现KMP算法可以提高字符串匹配的效率,避免不必要的字符匹配

ByteHero的博客 193

C#实现KMP字符串匹配算法

KMP算法是一种高效的字符串匹配算法,可以在O(m+n)的时间内完成匹配,其中m和n分别为主串和模式串的长度。本文将介绍如何使用C#语言实现KMP算法,包括完整源代码。该函数使用了GetNextArray函数来获取模式串的最长前缀后缀匹配数组next。KMP算法通过预处理出模式串的最长前缀后缀匹配数组next,来避免主串中不必要的匹配C#实现KMP字符串匹配算法

PixelShadeZ的博客 221

C#实现Rabin-Karp字符串匹配算法

Rabin-Karp算法的核心思想是将模式串和文本串都看成一个数,然后通过比较这两个数来判断是否匹配。具体地说,我们可以将字符串中的每个字符看成一个26进制数的某个位上的数字,然后将这些26进制数当做多项式的系数来构造一个多项式。Rabin-Karp算法是一种字符串匹配算法,它可以在O(n+m)的时间复杂度内查找一个模式串是否存在于一个文本串中。值得注意的是,为了避免进行大量的乘法运算,我们可以使用哈希函数来计算多项式的值。的子串的哈希值,并与模式串的哈希值进行比较即可。函数用于计算哈希值,

带你成为别人眼中的大佬! 171

使用C#实现Rabin-Karp字符串匹配算法

接下来,我们实现了一个名为RabinKarpSubstringSearch的静态方法,该方法接受两个字符串作为输入:text和pattern,分别代表文本和模式。然后,每次迭代中,它会将text中当前子字符串的哈希值与pattern的哈希值进行比较。该方法除去原始字符并减少当前子字符串的哈希值,然后将新的字符添加到末尾并添加到哈希值中。在Main方法中,我们定义了两个字符串:text和pattern,用于演示如何使用Rabin-Karp算法在text字符串中查找pattern字符串

ByteHero的博客 140

C#实现高效字符串匹配的Boyer-Moore算法详解

好后缀规则是指当模式串的后缀与文本串匹配,但前缀与文本串不匹配时,我们可以通过已匹配的后缀子串来寻找一个“好后缀”,然后将模式串向右移动相应的位数。坏字符规则是指当模式串与文本串中某个字符不匹配时,我们可以通过已匹配的字符和模式串中的字符进行比对,找到“坏字符”所在的位置,然后将模式串向右移动若干位。Boyer-Moore算法的基本思路是:从模式串(待查找字符串)的末尾开始往前匹配,如果发现不匹配的情况,则通过预处理已知信息来跳过一些字符,直接跳到下一个尝试匹配位置。

AhTf__的博客 302

C# 中的正则表达式,如何使用正则表达式进行字符串匹配和替换?

C# 中,可以使用正则表达式进行字符串匹配和替换。正则表达式是一种用来描述字符串模式的语言,可以用来检查一个字符串是否符合某种模式,或者从字符串中提取符合某种模式的子串。其构造函数接受两个参数,第一个参数是正则表达式的字符串表示,第二个参数是一个选项枚举类型,用来指定匹配模式。该方法接受两个字符串参数,第一个参数表示要进行替换的原始字符串,第二个参数表示要替换成的新字符串。方法来进行字符串匹配。该方法接受一个字符串参数,用来表示要匹配字符串。中的数字替换成字符串 "dog",并将结果输出到控制台。

無限進步的全棧遊戲開發的博客 4067

C#实现匹配字符串(附完整源码)

C#实现匹配字符串(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 522

C#基础--字符串和正则表达式

在占位符 中,格式字符串跟在表达式的后面,用冒号隔开。StringBuilder类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充,这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。StringTormat方法的第一个参数接受一个格式字符串,其中的占位符从0开始编号,其后是放入字符串空白处的参数。重复修改给定的字符串,效率会很低,它实际上是一个不可变的数据类型,这意味着一旦对字符串对象进行了 初始化,该字符串对象就不能改变了。

不求上进的码农的博客 1267

C++常用算法及数据结构(字符串匹配算法

然后,在文本串中滑动窗口,比较窗口的哈希值与模式串的哈希值是否相等,以及窗口内的字符串与模式串是否相等。它的时间复杂度为O(n+m+k),其中n为文本串长度,m为模式串平均长度,k为模式串数量。KMP算法利用模式串的特性,通过建立一个部分匹配表(Partial Match Table)来避免在模式串和文本串中的不必要的匹配和回溯。它的时间复杂度为O(n+m),其中n为文本串长度,m为模式串长度。字符串匹配算法是指在一个文本串(较长的字符串)中查找一个模式串(较短的字符串)的出现位置或匹配情况的算法

Ljq0704的博客 3140

C# 字符串和正则表达式

1.创建字符串 string 变量名 = "字符串内容"; string str = "abcdrf"; Console.WriteLine(str); 2.获取字符串的长度 变量名.Length 相当于调用了一个计算长度的方法 string str = "abcdrf"; Console.WriteLine(str); int len = str.L...

m0_51743362的博客 2227

C# 字符串匹配的Jaro-Winkler 相似度算法

想要更精确地匹配输入字符串和选项,可以使用字符串相似性算法,例如 Levenshtein 距离或 Jaro-Winkler 相似度等算法。这些算法会考虑字符串之间的编辑距离、字符顺序等因素,从而更准确地计算字符串的相似性。

kuilaurence的博客 1097

C#编程实现通配符匹配算法及源码

通配符匹配算法实现比较简单,主要思路是根据通配符规则逐一比对目标字符串和模式字符串的每一个字符,如果存在不匹配的情况则返回失败,否则返回成功。通配符匹配算法是一种字符串匹配方法,可以按照指定的通配符规则从目标字符串中查找与给定模式匹配字符串。方法中,首先对模式字符串和目标字符串进行大小写处理(如果需要),然后通过遍历目标字符串和模式字符串的每个字符逐一比对它们的值。字符,如果模式字符串中所有字符都已匹配,则返回成功,否则返回失败。,用于接收目标字符串,并返回是否匹配成功的结果。进行匹配,输出结果为。

与其临渊羡鱼,不如退而结网 1037
下一篇: LeetCode刷题(766. 托普利茨矩阵)
private_GK
博客等级 码龄9年 1粉丝 6原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值