华为OJ(查找兄弟单词)
2015-08-25 21:12
363 查看
描述 | 题目描述 |
---|---|
知识点 | 查找 |
运行时间限制 | 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; }
相关文章推荐
- Maximal Square
- ioc笔记
- POJ1496 Word Index【全排列】
- 抽象类和抽象方法
- 2015 Multi-University Training Contest 4
- hdu 5411 CRB and Puzzle(矩阵快速幂)
- 黑马程序员-OC-继承
- Lua学习笔记--C调用Lua
- java_Collection_介绍
- android使用全局变量的两种方法
- 2015 Multi-University Training Contest 3
- UML——包图
- pat(B)1016. 部分A+B
- java 学习笔记基础
- C++ Primer : 第十二章 : 动态内存之动态内存管理(new和delete)
- linux查看tcp的状态命令
- KMP 讲解 和 KMP的 strstr 实现
- 【C++】顺序表的实现
- Python eval()函数
- 机器学习之神经网络