KMP算法是一种字符串匹配算法,用于匹配模式串P在文本串S中出现的所有位置,例如S=“abc”,P=“aba”那么出现的所有位置是1,3,这里我不细说他的原理,只告诉模板了。
import java.math.BigInteger; import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);char[] c1=scanner.next().toCharArray();char[] c2=scanner.next().toCharArray();//表示的是c1在c2中出现的次数int n=c1.length;int m=c2.length;int[] next=new int[n];for(int i=1,j=0;i<n;i++){while(j>0&&c1[i]!=c1[j]){j=next[j-1];}if(c1[i]==c2[j]){j++;}next[i]=j;}//c1在c2中出现的次数int ans=0;for(int i=0,j=0;i<m;i++){while(j>0&&c1[j]!=c2[i]){j=next[j-1];}if(c1[j]==c2[i]){j++;}if(j==n){ans++;j=0;}}System.out.println(ans);}}
有个例题:斤斤计较的小Z(这个题目样例2不对)