- B子串排序
给你n个字符串,每个字符串都是有小写字母组成的。重新给这些字符串
排序按照以下规则:每个字符串的前面都是它的子串
如果在b中选择连续的字母可以组成a,则称a是b的子串。比如字符串“for”
是“codeforces”的子串,“for”是“therefore”的子串,但是没有子串“four”“fofo”和“rof”。
输入:
第一行是一个整数n(字符串的数量)
下面的n行是给你的字符串。字符串的长度为1到100。每个字符串
由小写字母组成。
一些字符串可能是相同的。
输出:
如果重新排序后可以不可能满足要求的序列就输出“NO”(没有引号)。
否则输出“YES”和n行要求的字符串的序列。
提示:在第二个样例中,你不可以重新排序“abab”使它为“abacaba”的子串。 - 题目链接:http://codeforces.com/contest/988/problem/B
- 通过的代码:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string str[120];
bool cmp(string a,string b){
int len1=a.length(),len2=b.length();
return len1==len2?a<b:len1<len2;
}
int main(){
int n;cin>>n;
for(int i=1;i<=n;i++)cin>>str[i];
sort(str+1,str+1+n,cmp);
int flag=0;
for(int i=2;i<=n;i++)if(str[i].find(str[i-1])==-1){
flag=1;break;
}
if(flag)puts("NO");
else {
puts("YES");
for(int i=1;i<=n;i++)cout<<str[i]<<endl;
}
}