CF988B Substrings Sort


题目传送门

前排芝士:

sort 排序

ASCII 码

思路:

将每个字符串按照某些条件排序,看前一个字符串是否是当前字符串的子串,如果不是则直接输出

判断的详细注释见代码

AC CODE:

#include<bits/stdc++.h>
using namespace std;
bool cmp(string s1,string s2){//自定义排序函数 
	if(s1.size()!=s2.size()){//当两个字符串长度不相等 
		return s1.size()<s2.size();//将长度小的排在前面 
	}else{//两个字符串长度相等 
		return s1<s2;//将 ASCII 小的字符串排在前面 
	}
}
int main(){
	int n;
	string a[105];
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+n+1,cmp);//排序 
	for(int i=2;i<=n;i++){//从 2 开始枚举 
		if(a[i].find(a[i-1])==-1){//在此字符串中找不到前一个字符串 
			cout<<"NO\n";//直接输出 
			return 0;//结束程序 
		}
	}
	cout<<"YES\n";//新排列中的每个字符串都满足在它前面的串都是它的子串 
	for(int i=1;i<=n;i++)cout<<a[i]<<endl;//输出每一个字符串 
	return 0;
}

文章作者: alex_liu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 alex_liu !
  目录