1. 程式人生 > 實用技巧 >牛客華為27-查詢兄弟單詞

牛客華為27-查詢兄弟單詞

題目描述

定義一個單詞的“兄弟單詞”為:交換該單詞字母順序,而不新增、刪除、修改原有的字母就能生成的單詞。 兄弟單詞要求和原來的單詞不同。例如:ab和ba是兄弟單詞。ab和ab則不是兄弟單詞。 現在給定你n個單詞,另外再給你一個單詞str,讓你尋找str的兄弟單詞裡,字典序第k大的那個單詞是什麼? 注意:字典中可能有重複單詞。本題含有多組輸入資料。

輸入描述:

先輸入單詞的個數n,再輸入n個單詞。
再輸入一個單詞,為待查詢的單詞x
最後輸入數字k

輸出描述:

輸出查詢到x的兄弟單詞的個數m
然後輸出查詢到的按照字典順序排序後的第k個兄弟單詞,沒有符合第k個的話則不用輸出。

示例1

輸入

3 abc bca cab abc 1

輸出

2
bca

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool isBrother(string s1,string s2){
    if (s1.length()==s2.length()){
        //長度相等並且是同一個字串,返回false
        //當長度相等,但不是同一個字串的時候,進行排序
        if(s1==s2) return false;
        sort(s1.begin(),s1.end());
        sort(s2.begin(),s2.end());
        if(s1==s2) return true;
    }
    return false;
}

int main(){
    int n;
    //輸入字典
    vector <string> dict;
    //要查詢的單詞
    string word;
    //次序
    int k;
    while(cin>>n){
        for(int i=0;i<n;i++){
            string sub;
            cin>>sub;
            dict.push_back(sub);
        }
        //字典排序
        sort(dict.begin(),dict.end());
        cin>>word;
        cin>>k;
        string res;
        int c=0;//兄弟單詞個數
        for(int i=0;i<dict.size();i++){
            //迴圈遍歷,先判斷是否為兄弟單詞
            if(isBrother(word,dict[i])){
                c++;
                if(c==k) res = dict[i];
            }
        }
        if(!dict.empty())cout<<c<<endl;
        cout<<res<<endl;
    }
    return 0;
}