【字符串匹配】1.暴力求解

本文目录:

  1. 字符串匹配解释

  2. 暴力解决匹配问题

  3. 暴力法代码

 

1.字符串匹配解释

字符串匹配,即有两个串,一个母串s,一个模式串p,看s中是否有p,返回其首次出现的位置。

 

2.暴力解决匹配问题

本文主要介绍暴力法解决字符串匹配。

所解决的问题 :当母串中有多个和模式匹配的串时,能输出正确的位置。

如:s = "ABABABA";      p = "ABA";

应返回:0,2,4

 

暴力法思路:

  • 利用两个指针,分别扫描两字符串,i从s字符串的第一个字符开始,j从p第一个字符开始往后匹配

  • 当两个字符相等时,即为匹配,i++;j++

  • 当两个字符不相等时,即为适配,i=i-j+1;j=0

  • ✳注意:当两个字符相等,但是j==p.length(),也应i=i-j+1;j=0

利用网上的暴力法的代码对于上面的例子不能AC(accept通过),我做了改进,试了我能想到的例子都能AC。和别人不一样,让我好慌呀。

 

图片表述:

一开始:

当i,j增加到p串的长度时:

 

 

3.暴力法代码

 

public class case11_BL匹配 {
    public static void main(String[] args) {
        String s = "ABABABA";
        String p = "ABA";
        match(s, p);
        
        

    }
    private static void match(String s, String p) {
        int i=0,j=0;
        while( i < s.length()&&j<p.length()) {
            if(s.charAt(i)==p.charAt(j)){//匹配
                i++;
                j++;
                if(j==p.length()){//此时如果j扫描结束,且未发生失配,循环不会继续下去
                    int ans=i-j;
                    System.out.println("first matching place:"+ans);
                    i=i-j+1;
                    j=0;
                }
                }else{//失配
                    j=0;
                    i=i-j+1;
                }    
        }
    }

}
暴力法

 

posted on 2021-01-30 20:36  丁不煮  阅读(174)  评论(0编辑  收藏  举报

导航