Substrings Sort
程序员文章站
2022-04-30 20:36:38
...
测试样例:
Input
5
a
abacaba
ba
aba
abab
Output
NO
大致题意:此行能不能再后面的字符串里面找到 若全都能找到则按长度输出字符串 否则输出NO
怎么想:1.也就是找到字串 所以前面能在后面找到,后面长度一定比前面长 所以先把字符串读入vector中 再利用bool自定义函数size()函数,按照长度从小到大排序
2.最后一行字符串是不需要去找从属关系的,所以end()-1,否则访问失败(脑补一下)
3.在STL中和string类中 find使用方法不同
stl中find(s.begin(),s.end(),字符) 返回的是迭代器 没找到则指向末迭代器
string中 s2.find(s1) 返回的是一个整型下标n
n==string::npos 则表示没找到
n!=string::npos 找到了
详情了解具体用法:https://www.sxt.cn/Java_jQuery_in_action/History_Direction.html
欢迎吐槽大神指点
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
bool cmp(string a,string b)
{
return a.size() < b.size();
}
int main()
{
string s;
vector<string>v;
int n; cin >> n; getchar();
for (int i = 0; i < n; i++)
{
getline(cin, s);
v.push_back(s);
}
sort(v.begin(),v.end(),cmp);
//排序完成
vector<string>::iterator it = v.begin();
for (it = v.begin(); it != v.end()-1; it++)
{
string s1 = *it;
auto xm = it + 1;
string s2 = *xm;
int n;
if ((n = s2.find(s1)) == string::npos)
{
break;
}
}
if (it != v.end()-1)
{
printf("NO");
}
else
{
printf("YES\n");
for (auto ix : v)
cout << ix << endl;
}
}