欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Substrings Sort

程序员文章站 2022-04-30 20:36:38
...

Substrings Sort
测试样例:
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;
	}

}