hdu 1238 字符串的简单运用

来源:互联网 发布:湖南大学有网络教育 编辑:程序博客网 时间:2024/06/06 23:51
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>#include<vector>using namespace std;typedef long long ll;#define inf 0x3f3f3f3f#define eps 1e-10#define maxl 30010#define mem(i,j) memset(i,j,sizeof(i))string s[110];int n,id,res;bool judge(string str){//判断子串和子串反串在不在所以得字符串里面    string rev;    for(int i=str.length()-1,j=0;i>=0;i--) rev+=str[i];    for(int i=0;i<n;i++){        if(s[i].find(str)==s[i].npos&&s[i].find(rev)==s[i].npos)            return false;    }    return true;}void solve(){    int len=s[id].length();    res=0;    for(int i=0;i<len;i++){//枚举所有的最短串的子串        for(int j=len-1;j>=i;j--){            if(j-i+1<res) continue; //这里是个剪枝 可以节省不必要的时间浪费            string s1=s[id].substr(i,j-i+1);            if(judge(s1)) res=max(res,j-i+1);        }    }    cout<<res<<endl;}int main(){    freopen("in.txt", "r", stdin);    int t;    cin>>t;    while(t--){        cin>>n;        int ans=inf;        id=0;        for(int i=0;i<n;i++){            cin>>s[i];            int len=s[i].length();            if(len<ans) {ans=len;id=i;}        }        solve();    }}

0 0
原创粉丝点击