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;
	}

}
在Java中,`substring`方法是`String`类的一个方法,用于获取字符串的一个子串。`substring`有两种重载形式,分别用于基于指定的起始位置截取子串和指定起始位置到结束位置截取子串。 1. `substring(int beginIndex)`方法: 这个方法返回一个新的字符串,该字符串是此字符串的一个子字符串。子字符串始于指定的`beginIndex`,直到此字符串末尾。`beginIndex`是子字符串的起始索引(第一个字符的索引是0)。如果`beginIndex`等于此字符串的长度,则返回空字符串。如果`beginIndex`是负数,则抛出`StringIndexOutOfBoundsException`异常。 2. `substring(int beginIndex, int endIndex)`方法: 这个方法返回一个新的字符串,该字符串是此字符串的一个子字符串。子字符串从`beginIndex`开始,直到索引`endIndex`的字符结束,但不包括`endIndex`索引处的字符。如果`beginIndex`等于`endIndex`,则返回空字符串。如果`beginIndex`大于`endIndex`,则抛出`StringIndexOutOfBoundsException`异常。如果`beginIndex`或`endIndex`为负,则同样抛出`StringIndexOutOfBoundsException`异常。 注意:截取子串时,需要保证指定的索引值在字符串长度范围内,否则将抛出`StringIndexOutOfBoundsException`异常。 示例代码: ```java String str = "Hello, World!"; String subStr1 = str.substring(7); // 从索引7开始截取到字符串末尾,结果为"World!" String subStr2 = str.substring(0, 5); // 从索引0开始截取到索引5(不包括5),结果为"Hello" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值