A

题目描述
有一些关键字,现在给你一个字符串,请你根据此字符串,将关键字根据相关关系排列方便检索。1
字符串长度相同的关键字才有关系(每组的长度都不相同,互不影响 ),两个字符串在相同位置的相同字符越多则关系越密切,若一样多则字典序越小越密切。
输入
多行(少于101),每行一个字符串(只含小写字母,长度不超过1000),连续多行的字符个数相同,视为一组输出,每组的最后一个字符为给你的字符串。
输出
每组数据按照相关关系密切程度排序
样例输入
aaa
bab
aba
acdes
abcde
aaaaa
样例输出
aaa
bab
abcde

acdes

方法一:

#include<iostream>

#include<string.h>
#include<algorithm>
using namespace std;
struct node{
    int count1;
    string s;
}a[101];
string s1;
bool cmp(const node &a1,const node &a2){
    if(a1.count1==a2.count1){
        return a1.s<a2.s;
    }
    return a1.count1>a2.count1;
}
int main(){
    int k1,k2,t1=0;
    cin>>s1;
    a[0].s=s1;
    k1=s1.size();
    while(cin>>s1){
        int k2=s1.size();
        if(k1==k2){
            t1++;
            a[t1].s=s1;
        }
        else{
            if(t1!=0){
                for(int i=0;i<t1;i++){
                    a[i].count1=0;
                    for(int j=0;j<k1;j++){
                        if(a[i].s[j]==a[t1].s[j]){
                            a[i].count1++;
                        }
                    }
                }
                sort(a,a+t1,cmp);
                for(int i=0;i<t1;i++){
                    cout<<a[i].s<<endl;
                }
            }
            a[0].s=s1;
            t1=0;
            k1=k2;
        }

    }
    if(t1!=0){
        for(int i=0;i<t1;i++){
           a[i].count1=0;
           for(int j=0;j<k1;j++){
                if(a[i].s[j]==a[t1].s[j]){
                    a[i].count1++;
                }
            }
        }
        sort(a,a+t1,cmp);
        for(int i=0;i<t1;i++){
           cout<<a[i].s<<endl;
        }
    }
    return 0;
}

方法二:

#include <bits/stdc++.h>

 
using namespace std;
string s[100001],str;
int l,i=0;
int cmp (string a,string b) {
    int x=0,y=0,j;
    for (j=0; j<l; j++) if (a[j]==s[i][j]) x++;
    for (j=0; j<l; j++) if (b[j]==s[i][j]) y++;
    if (x!=y) return x>y;
    else for (j=0; j<l; j++) if (b[j]!=a[j]) return b[j]>a[j];
}
int main() {
//    freopen("1.in","r",stdin);
//    freopen("1.out","w",stdout);
    cin>>s[0];
    l=s[0].length();
    while (cin>>str) {
        if (str.length()==l) {
            s[++i]=str;
        } else {
            sort (s,s+i,cmp);
            for (int j=0; j<i; j++) {
                cout<<s[j]<<endl;
            }
            i=0;
            s[0]=str;
            l=s[0].length();
        }
    }
    sort (s,s+i,cmp);
    for (int j=0; j<i; j++) {
        cout<<s[j]<<endl;
    }
}


你可能感兴趣的:(字符串,字典序)