题目
本题链接:两种排序方法
考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序。例如:
“car” < “carriage” < “cats” < "doggies < “koala”
2.根据字符串的长度排序。例如:
“car” < “cats” < “koala” < “doggies” < “carriage”
考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。
输入描述:
输出描述:
示例1:
解题思路:
本题思路比较简单,将接收的字符串都放到vector容器中,利用string的operator>=运算符重载来按ASCII码比较字符串,利用string的size比较字符串的长度。
代码:
#include<string>
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<string> s;
s.resize(n);
for(auto& str : s)
{
cin >> str;
}
bool lensort = true;//按字符串长度比较标志
bool lexisort = true;//按字典序比较标志
//判断是否按长度排序
for(int i = 0; i < n; i++)
{
if(s[i-1].size() > s[i].size())
{
lensort = false;//如果前面字符串长度大于后面,则不是按长度排序
break;
}
}
//判断是否按字典序排序
for(int i = 0; i < n; i++)
{
if(s[i-1] > s[i])
{
lexisort = false;//通过string的operator>=运算符重载来比较
break;
}
}
if(lensort && lexisort)
{
cout << "both" <<endl;
}
else if(lensort)
{
cout << "lengths" << endl;
}
else if(lexisort)
{
cout << "lexicographically" << endl;
}
else
{
cout << "none" << endl;
}
return 0;
}