Substrings

来源:互联网 发布:假火车票制作软件 编辑:程序博客网 时间:2024/05/19 14:40
You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings. 
Input
The first line of the input file contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case contains a single integer n (1 <= n <= 100), the number of given strings, followed by n lines, each representing one string of minimum length 1 and maximum length 100. There is no extra white space before and after a string. 
Output
There should be one line per test case containing the length of the largest string found. 
Sample Input
23ABCDBCDFFBRCD2roseorchid
Sample Output
22
题意:找出字符串的最长连续公共子串
#include <iostream>#include <string>#include <algorithm>using namespace std;int main(){    int t,n;    string str[101];    cin>>t;    while(t--)    {        int ok=0;        int x,minn=101,maxx=0;        cin>>n;        for(int i=0;i<n;i++)        {             cin>>str[i];             //reverse(str[i].begin(),str[i].end());             if(str[i].length()<minn)             {                 minn=str[i].length();                 x=i;             }        }        //cout<<minn<<endl;        for(int i=str[x].length();i>0;i--)        {            for(int j=0;j<str[x].length()-i+1;j++)            {                int l;                string str1=str[x].substr(j,i);                string str2=str1;                reverse(str2.begin(),str2.end());                for(l=0;l<n;l++)                {                    if(str[l].find(str1)==-1&&str[l].find(str2)==-1)                        break;                }                if(l==n)                {                    maxx=str1.length();                    ok=1;                    break;                }            }            if(ok)                break;        }        cout<<maxx<<endl;    }    return 0;}


原创粉丝点击