Substrings &&http://acm.hdu.edu.cn/showproblem.php?pid=1238

话说这两天心里挺纠结的,,总是静不下心学习,,放假留校的孩纸伤不起啊!!!。。。

题意:这是一道搜索入门题,就是找所有字符串共有的最长串的长度。。。先把所有字符串从小到大排序,找出最短串,然后枚举最短串,(和反转串)需要注意一点就是从长到短进行枚举,,,一旦找到就是答案。。。

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string  s[101];
int n;
bool cmp(string a,string b)
{return a.size()<b.size();}
string revers(string t)
{ string a="";
  for(int i=t.size()-1;i>=0;--i)
   a.append(1,t[i]);//相当于在a后面加一个字符t[i].
  return a;
 }
int f(string a)
 {  int m=a.size();
    for(int i=m;i>=1;--i)//子串从长到短枚举。。。。
		for(int j=0;i+j<=m;++j)
		{  string b=a.substr(j,i);
	        string c=revers(b);
			bool flag=1;
			for(int k=1;k<n;++k)
			{ if(s[k].find(b)!=-1) continue;
			  if(s[k].find(c)!=-1) continue;
			   flag=0;
			   break;//有一个字符串不包含该子串有就跳出当前循环。
			}
			if(flag) return b.size();
      }
	return 0;
  }
int main()
{ int Case;
   cin>>Case;
   while(Case--)
   {  cin>>n;
    for(int i=0;i!=n;++i)
		 cin>>s[i];
	sort(s,s+n,cmp);
	cout<<f(s[0])<<endl;
   }return 0;
}



你可能感兴趣的:(c,String,stdstring)