zoukankan      html  css  js  c++  java
  • hdu2087

    基本上是裸的KMP。

    虽然我 现在KMP思想没有完全理解透彻。但是凭借着一点微不足道的理解和模板也能A掉此题。

    #include <iostream>
    #include <string>
    using namespace std;
    #define MAX 1000005
    int next1[MAX];
    int sum;
    void GetNext(string t)
    {
    	int i=0;
    	int j=-1;
    	while(i<(int)t.size())
    		if(j==-1||t[i]==t[j])
    		{
    			++i;
    			++j;
    			next1[i]=j;
    		}
    		else
    			j=next1[j];
    }
    void KMP(string s,string t)
    {
    	GetNext(t);
    	int i=0,j=0;
    	int slen = (int)s.size();
    	int tlen = (int)t.size();
    	while(i<slen&&j<tlen)
    		if(j==-1||s[i]==t[j])
    		{
    			if(j==tlen-1)
    			{
    				sum++;
    				++i;
    				j=0;//成功匹配后,不退出从头再来,开始匹配
    			}
    			else
    			{
    			++i;
    			++j;
    			}
    		}
    		else
    		{
    			j=next1[j];
    		}
    }
    int main()
    {
    	string s;
    	while(cin>>s)
    	{
    		if(s=="#")
    			break;
    		string t;
    		cin>>t;
    		getchar();
    		sum=0;
    		next1[0]=-1;
    		KMP(s,t);
    		printf("%d
    ",sum);	
    	}
    	return 0;
    }


  • 相关阅读:
    Qt环境搭建(Visual Studio)
    HTML基础
    关于Qt
    I am back
    Node Security
    Mobile Assistant
    Home Server
    抉择-什么最重要
    在一个JSP页面中包含另一个JSP页面的三种方式
    JS控制DIV隐藏显示
  • 原文地址:https://www.cnblogs.com/unclejelly/p/4082143.html
Copyright © 2011-2022 走看看