• 【kmp算法】uva11475 Extend to Palindrome


    就把每个串倒过来,和原串匹配,看最后能匹配多少就行。

    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    char s[100010],s2[100010];
    int __next[100010];
    void GetFail(char P[],int __next[])//__next[i]表示s[0]~s[i-1]的前缀中,最大相等的前后缀的长度是多少 
    {
        __next[0]=-1;
        int len=strlen(P);
        for(int i=0;i<len;i++)
          {
            int j=__next[i];
            while(j>=0&&P[i]!=P[j])
    		  j=__next[j];
            if(j!=-1 && P[i]==P[j])
    		  __next[i+1]=j+1;
            else __next[i+1]=0;
          }
    }
    int find(char T[],char P[],int __next[])
    {
        int n=strlen(T),m=strlen(P);
        GetFail(P,__next); int j=0;
        for(int i=0;i<n;++i)
          {
            while(j&&P[j]!=T[i]) j=__next[j];//如果j变成0仍不能满足P[j]==T[i],则只增加i直到出现P[j]==T[i]为止。
            if(P[j]==T[i]) ++j;
          }
        return j;
    }
    int main()
    {
    	freopen("e.in","r",stdin);
    	while(scanf("%s",s)!=EOF)
    	  {
    	  	int len=strlen(s);
    	  	memcpy(s2,s,sizeof(s));
    	  	reverse(s2,s2+len);
    	  	int ans=find(s,s2,__next);
    	  	for(int i=0;i<len-ans;++i)
    	  	  putchar(s[i]);
    	  	puts(s2);
    	  }
    	return 0;
    }
  • 相关阅读:
    洛朗级数
    泰勒级数
    中心极限定理
    置信区间公式
    简单随机样本的性质
    极大似然估计
    矩估计法
    摆摊70
    天天去哪吃
    天天和树
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/6412100.html
Copyright © 2020-2023  润新知