牛客网-两种排序方法(网易)
题目描述
考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序。例如: "car" < "carriage" < "cats" < "doggies < "koala" 2.根据字符串的长度排序。例如: "car" < "cats" < "koala" < "doggies" < "carriage" 考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。
输入描述:
输入第一行为字符串个数n(n ≤ 100) 接下来的n行,每行一个字符串,字符串长度均小于100,均由小写字母组成
输出描述:
如果这些字符串是根据字典序排列而不是根据长度排列输出"lexicographically", 如果根据长度排列而不是字典序排列输出"lengths", 如果两种方式都符合输出"both",否则输出"none"
示例1
输入
3 a aa bbb
输出
both
代码如下:
#include<iostream> #include<string> #include<vector> #include<set> #include<algorithm> using namespace std; bool isdict(vector<string> str,int n){ vector<string> res; res=str; sort(res.begin(),res.end()); //默认sort容器就是根据字符串的字典序排序 for(int i=0;i<n;++i){ if(str[i]!=res[i]){ return false; break; } } return true; } bool compare(string a,string b){ return a.size()<b.size();//按照升序来排序,若是按照降序,则为return a.size()>b.size() } bool islen(vector<string> str,int n){ vector<string> res; res=str; sort(res.begin(),res.end(),compare); //自己定义一个sort容器,根据每个字符串的长度来排序 for(int i=0;i<n;++i){ if(str[i]!=res[i]){ return false; break; } } return true; } int main(){ int n; string s; vector<string> str; cin>>n; for(int i=0;i<n;++i){ cin>>s; str.push_back(s); } if(isdict(str,n)&&islen(str,n)) cout<<"both"; if((isdict(str,n)==0)&&(islen(str,n)==0)) cout<<"none"; if((isdict(str,n)==1)&&(islen(str,n)==0)) cout<<"lexicographically"; if((isdict(str,n)==0)&&(islen(str,n)==1)) cout<<"lengths"; //system("pause"); return 0; }