zoukankan      html  css  js  c++  java
  • 【字符串】【扩展kmp模板】




    /*主函数里初始化和调用*/
    /*next[0] = 0;
    exkmp(s2+1,s2,next+1,next);
    exkmp(s1,s2,ex,next);*/
    /*扩展kmp算法可以用o(n+m)的复杂度求出字符串s1的任意后缀与字符串s2的最长公共前缀*/
    /*扩展kmp算法的next[i]==j表示s2的以s2[i]为起始的后缀与串本身的最长公共前缀长度*/
    /*ex[i]为s1[i..]与s2的最长公共前缀,next[i]为s2[i..]与s2的最长公共前缀*/
    void exkmp(char s1[],char s2[],int ex[],int next[])
    {
    	int i,j,p;
    	i = j = 0;
    	p = -1;
    	while(s1[i]!='')
    	{
    		if( p == -1)
    		{
    			j = 0;
    			do
    				p++;
    			while(s1[i+p] != ''&&s1[i+p] == s2[j+p]);
    			ex[i] = p;
    		}
    		else if(next[j] < p)
    			ex[i] = next[j];
    		else if(next[j] > p)
    			ex[i] = p;
    		else
    		{
    			j = 0;
    			while(s1[i+p] != ''&&s1[i+p] == s2[j+p])
    				p++;
    			ex[i] = p;
    		}	
    		
    		i++;
    		j++;
    		p--;
    	}
    	ex[i] = 0;
    	return;
    }
    



  • 相关阅读:
    笔记1
    笔记2
    笔记3
    两个多线程的交替打印
    三个多线程的交替打印
    内部类
    基本反射了解
    键盘监听事件KeyListener
    焦点监听事件FocusListener
    文本框JTextField,密码框JPasswordField
  • 原文地址:https://www.cnblogs.com/hellocheng/p/7350063.html
Copyright © 2011-2022 走看看