hdu2594——Simpsons’ Hidden Talents

hdu2594 题目链接:https://vjudge.net/problem/HDU-2594

这题目没有任何技术含量。。。

翻译:编写一个程序,当给定字符串S1和S2时,该程序查找最长的S1前缀,该前缀为S2的后缀。

首先,我们可以想到,查找两个字符串的前后缀太麻烦。

|(____)___________|  s1

|___(____)| s2

当s1的前缀与s2的后缀相同时,我们把s1和s2加起来得到

|(___)______________(___)|

于是,题目就转换成了,求字符串的前后缀最长匹配(kmp中的next数组)。

代码:

#include<bits/stdc++.h>

using namespace std;

string pat,s1,s2;
int nxt[100005];

void getNext(int lengthP)
{ 
    int j=0,k=-1; 
    nxt[0]=-1; 
    while(j<lengthP)
    { 
        if(k==-1||pat[j]==pat[k])
            j++,k++,nxt[j]=k;
        else
            k=nxt[k];
    }
}
//求next

int main()
{
    while(cin>>s1>>s2)
    {
        pat=s1+s2;
        int l1=s1.length(),l2=s2.length();        
        int len=pat.length();
        getNext(len);
        nxt[len]=min(nxt[len],min(l1,l2));
        for(int i=0;i<nxt[len];i++)cout<<pat[i];
        if(nxt[len])cout<<' ';
        cout<<nxt[len]<<endl;//打印
    }
    
    return 0;
}
View Code
扫描二维码关注公众号,回复: 4552084 查看本文章

猜你喜欢

转载自www.cnblogs.com/Robin20050901/p/10135390.html
今日推荐