华为OJ(查找兄弟单词)

来源:互联网 发布:我跟肌肉男的夜晚知乎 编辑:程序博客网 时间:2024/05/22 17:44

描述

题目描述

 

知识点查找运行时间限制10M内存限制128输入

先输入字典中单词的个数,再输入n个单词作为字典单词。
输入一个单词,查找其在字典中兄弟单词的个数
再输入数字n

输出

根据输入,输出查找到的兄弟单词的个数

输出指定的第n个兄弟单词

样例输入3 abc bca cab abc 1样例输出2 bca有两个方法:

第一种,将所有单词放入set中(按键值排好序,方便后面寻找指定第n个兄弟),然后对要查找的单词和字典中每个作对比,如果是兄弟单词,计数cnt++,并放入vector中,这样vector中第n个单词即要查找的第n个兄弟单词。这是我自己的思路。

第二种方法,用map,但键值使用重新排序后的单词,比如bac排序后为abc。将兄弟组成的链表作为value,这是网上别人的思路,留作以后的练习题吧。

#include<iostream>#include<set>#include<vector>#include<string>using namespace std;bool isBrother(string s1,string s2){if(s1==s2)return false;if(s1.size()!=s2.size())return false;int flag;for(int i=0;i<s1.size();i++){flag=0;for(int j=0;j<s1.size();j++){if(s1[i]==s2[j]){flag=1;break;}}if(flag==0)return false;}return true;}int main(){set<string> sset;vector<string> svec;string s;int n,cnt=0;cin>>n;for(int i=0;i<n;i++){cin>>s;sset.insert(s);}cin>>s;for(set<string>::iterator it=sset.begin();it!=sset.end();it++){if(isBrother(s,*it)){cnt++;svec.push_back(*it);}}cin>>n;cout<<cnt<<endl;cout<<svec[n-1]<<endl;//system("pause");return 0;}


0 0
原创粉丝点击