牛客网-两种排序方法(网易)

题目描述

考拉有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;
}
原文地址:https://www.cnblogs.com/rgly/p/7441997.html