HDU 1238 Substrings

题目地址:点击打开链接

思路: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;
}


你可能感兴趣的:(HDU 1238 Substrings)