华为OJ-查找兄弟单词
2017-08-03 16:15
786 查看
题目描述
输入描述:
先输入字典中单词的个数,再输入n个单词作为字典单词。输入一个单词,查找其在字典中兄弟单词的个数
再输入数字n
输出描述:
根据输入,输出查找到的兄弟单词的个数示例1
输入
3 abc bca cab abc 1
输出
2 bca
注意:这道题目有些地方没说清楚!
正确的描述应该是这样的:
[b]输入描述: [/b]
先输入字典中单词的个数n,再输入n个单词作为字典单词。
再输入一个单词,查找其在字典中兄弟单词的个数m
再输入数字k
[b]输出描述: [/b]
根据输入,输出查找到的兄弟单词的个数m
然后输出查找到的兄弟单词的第k个单词。
#include<iostream> #include<string> #include<vector> #include<algorithm> #include<functional> using namespace std; int main() { //输入 vector<string> vec; //用来保存输入单词 vector<string> vec2; //用来保存兄弟单词 int N,i; while(cin>>N) { for(i=0;i<N;i++) { string s; cin>>s; vec.push_back(s); } string word; cin>>word;//待查找单词 int k; cin>>k; //输出兄弟单词在字典顺序中的下标,输出时一定要判断k值的大小是否超出vec2的下标范围。 //处理 vector<string>::iterator ite; int cnt=0; for(ite=vec.begin();ite!=vec.end();ite++) { string temp(*ite); string temp1(*ite);//temp字符的副本,因为temp字符在之后的处理过程可能会删除掉一些字符。所以用temp1来保存副本。 int len1=temp.size(); int len2=word.size(); int j=0; string::size_type idx; for(j=0;j<word.size();j++) { idx=temp.find(word[j]); if(idx!=-1) { temp.erase(idx,1);//找到一个字符就把该字符从temp中删除掉! continue; } else break; } if((j==word.size())&&(len1==len2)&&(temp1.compare(word)!=0)) { vec2.push_back(temp1); cnt++; } } sort(vec2.begin(),vec2.end());//排序,实现字典顺序 //输出 /*输出注意:1.没有兄弟单词时,只输出一个0; 2.兄弟单词索引超过兄弟单词总数时,只输出兄弟单词的总数 */ cout<<cnt; if(cnt!=0) { cout<<endl; if(k<=vec2.size()) //这地方有个坑 { cout<<vec2[k-1]<<endl; } } else cout<<endl; vec.clear(); vec2.clear(); } return 0; }
相关文章推荐
- 华为OJ:查找兄弟单词
- 【华为OJ】查找兄弟单词(未通过)
- 华为OJ——查找兄弟单词
- 【华为OJ】【073-查找兄弟单词】
- 华为oj 查找兄弟单词
- 华为OJ——查找兄弟单词
- 华为OJ中级题-查找兄弟单词
- 华为OJ(查找兄弟单词)
- 【华为OJ】查找兄弟单词
- 华为机试在线训练-牛客网(17)查找兄弟单词
- 华为机试---查找兄弟单词
- 华为机试-查找兄弟单词
- 华为oj之兄弟单词
- 华为机试——查找兄弟单词
- 华为练习2 查找兄弟单词
- 【华为OJ】查找输入整数二进制中1的个数
- 华为OJ(查找两个字符串a,b中的最长公共子串)
- 华为oj 查找输入整数二进制中1的个数
- 华为OJ 初级:字串的连接最长路径查找
- 【华为OJ】字符串最后一个单词的长度