//杭电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
相关资源:数据结构—成绩单生成器