//第一次由于用了两层循环,所以超时了!原来我没有用到排序出来的结果,
//在排序出来的结果上用一个层循环就可以解决了超时的问题!
#include "iostream"
#include "string"
#include "algorithm"
using namespace std;
int main()
{
int TestCase;
cin >> TestCase;
while (TestCase--)
{
int PhoneNum;
cin >> PhoneNum;
string *str = new string[PhoneNum];
for (int i = 0; i < PhoneNum; i++)
cin >> str[i];
sort(str, str + PhoneNum);//对字符串进行排序,这个排序很重要,以致下面的循环用不到两层循环,所以就缩短了时间!
int tag = 0;
for (int i = 0; i < PhoneNum - 1; i++)
{
if (str[i].size() > str[i+1].size())//判断两个字符串的长短,在长度长的字符串中寻找字串!
{
if ( str[i+1] == str[i].substr(0, str[i+1].size()))
{
cout << "No" << endl;
tag = -1;//标志位的设置!
break;
}
}
else
{
if (str[i] == str[i+1].substr(0, str[i].size()))
{
cout << "NO" << endl;
tag = -1;
break;
}
}
}
if (tag == 0)
cout << "YES" << endl;
}
}
sicily 1426
最新推荐文章于 2015-09-24 11:20:25 发布