牛客華為27-查詢兄弟單詞
阿新 • • 發佈:2020-12-08
題目描述
定義一個單詞的“兄弟單詞”為:交換該單詞字母順序,而不新增、刪除、修改原有的字母就能生成的單詞。 兄弟單詞要求和原來的單詞不同。例如: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; }