题解 | #查找兄弟单词#
查找兄弟单词
http://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
C++ 双百解题
1、将输入字符串转化为数字,可以高效比较是否相等;
2、用 multiset 容器实现对兄弟单词的字典排序;
3、输出对应的数量,字符串;
#include<iostream> #include<string> #include<vector> #include<set> using namespace std; bool Judge(string str1,string str2) { if(str1.length()!=str2.length()){ return false; }else{ int len=str1.length(); for(int i=0;i<len;++i){ auto it=str2.find(str1[i]); if(it==str2.npos){ return false; } str2[it]='0'; } return true; } } int main() { int num; while(cin>>num){ vector<string> vs; string str; int index; string tmp; vector<int> vs1(num,0); for(int i=0;i<num;++i){ cin>>tmp; vs.push_back(tmp); for(int j=0;j<tmp.length();++j){ vs1[i]+=tmp[j]-'a'; } } cin>>str>>index; int len=str.length(); int gola=0; for(int i=0;i<len;++i){ gola+=str[i]-'a'; } multiset<string> ms; int count=0; for(int i=0;i<num;++i){ if((gola==vs1[i])&&(str!=vs[i])){ if(Judge(str,vs[i])){ ms.insert(vs[i]); count++; } } } cout<<count<<endl; if(index<=count){ auto msit=ms.begin(); for(int i=1;i<index;++i){ msit++; } cout<<*msit<<endl; } } }