【字符串匹配】1.暴力求解
本文目录:
-
字符串匹配解释
-
暴力解决匹配问题
-
暴力法代码
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; } } } }