杭电 1238

it2022-05-08  10

//杭电1238题:求最长公共子串//思路:使用string中的相应方法//教训:特别要注意临界条件#include <string>#include <iostream>#include <stdio.h>#include <algorithm> //引入algorithm类 using namespace std;bool cmp(string a,string b) //定义sort的谓词{ return a.size()<b.size();}string reversestr(string str){ int i=0; int j=str.size()-1; char c; while(i<j) {  c = str[j];  str[j] = str[i];  str[i] = c;  i++;  j--; } return str;}int main(){ //freopen("2.txt","r",stdin); //使用freopen重定义输入输出流,头文件是stdio.h int t; cin>>t; for(int i=0;i<t;++i) {  int num;  string str[101];  int n;  cin>>n;  for(int j=0;j<n;++j)  {   cin>>str[j];  }  sort(str,str+n,cmp);  //调用algorithm中的sort函数,注意第二个参数加的是n,指向的是最后一个元素的下一个位置  int minsize = str[0].size();  string substring;  string resubstr;  for(int i1=minsize;i1>0;i1--)  //提取字符个数  {   bool isSub = false;   for(int i2=0;i2<minsize;++i2) //起始位置   {    if(i1+i2>minsize)     break;    substring = str[0].substr(i2,i1);    resubstr = reversestr(substring);    for(int i1=1;i1<n;++i1)    {     if(str[i1].find(substring)>str[i1].size() && str[i1].find(resubstr)>str[i1].size())//使用algorithm中的find函数     {      break;     }    }    if(i1==n)    {     isSub = true;     break;    }   }   if(isSub)   {    cout<<i1<<endl;    break;   }   }  //特别要注意一个也不成功的情况   if(i1==0)   cout<<0<<endl; } //fclose(stdin); return 0;}

转载于:https://www.cnblogs.com/north_dragon/archive/2010/04/20/1716671.html

相关资源:数据结构—成绩单生成器

最新回复(0)