题目地址:点击打开链接
思路:string的子串:
string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串
int find(const string &s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置
查找成功时返回所在位置,失败返回string::npos的值
AC代码:
#include<iostream> #include<string> #include<algorithm> using namespace std; string a[102]; int main() { string s1,s2; int t,n,i,j,mini,min,k,max; cin>>t; while(t--) { max = 0; min = 200; cin>>n; for(i=0; i<n; i++) { cin>>a[i]; if(a[i].size() < min) { min = a[i].size(); mini = i; } } /*for(i=1; i<=a[mini].size(); i++)//i是字符的个数不是结束位置 { for(j=0; j<i; j++) { s1 = a[mini].substr(j,i); s2 = s1; reverse(s2.begin(),s2.end()); for(k=0; k<n; k++) { if(a[k].find(s1,0) == string::npos && a[k].find(s2,0) == string::npos) break; } if(k == n && i - j + 1 > max) max = i - j + 1; } }*/ for(i=0; i<a[mini].size(); i++) { for(j=1; j<=a[mini].size()-i; j++) { s1 = a[mini].substr(i,j); s2 = s1; reverse(s2.begin(),s2.end()); for(k=0; k<n; k++) { if(a[k].find(s1,0) == string::npos && a[k].find(s2,0) == string::npos) break; } if(k == n && j > max) max = j; } } cout<<max<<endl; } return 0; }