标签:bst style while bsp nes bit 一个 desc sample
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594
题目:
题意:
给出s1,s2两个串 求出既为s1的前缀又为s2后缀的子串
思路:
把s1 s2两个串合并成一个新字符串S 把题目转换成求S串的既是前缀又是后缀的最长子串
因为是s1 s2串的子串 要留意在S串中求出来子串的长度是否超过s1和s2的长度 如果超过 就是直接将s1或s2串当作子串
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e4+10;
int nx[maxn*2];
string s,t;
void getnx(string S,int len){
int j=0,k=-1;
nx[0]=-1;
while(j<len){
if(k==-1 || S[j]==S[k]) nx[++j]=++k;
else k=nx[k];
}
}
int main(){
// freopen("1.in","r",stdin);
while(cin>>s){
cin>>t;
memset(nx,0,sizeof(nx));
string S=s+t;
int len=S.length();
getnx(S,len);
if(nx[len]>0){
if(nx[len]>min(s.length(),t.length())){
if(s.length()>t.length()){
cout<<t<<" "<<t.length()<<endl;
}
else cout<<s<<" "<<s.length()<<endl;
}
else{
string tmp=S.substr(0,nx[len]);
int tlen=tmp.length();
cout<<tmp<<" "<<tlen<<endl;
}
}
else cout<<"0"<<endl;
}
return 0;
}
HDOJ 2594 Simpsons’ Hidden Talents (KMP)
标签:bst style while bsp nes bit 一个 desc sample
原文地址:https://www.cnblogs.com/whdsunny/p/10859074.html