首页 > 学院 > 开发设计 > 正文

华为机试在线训练-牛客网(17)查找兄弟单词

2019-11-10 16:46:25
字体:
来源:转载
供稿:网友

题目描述

输入描述:

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

输出描述:

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

输入例子:
3	abc	bca	cab	abc	1
输出例子:
2	bca这个题目的问题描述让人很是糊涂。正确的描述应该是这样的:
输入描述:
先输入字典中单词的个数n,再输入n个单词作为字典单词。
再输入一个单词,查找其在字典中兄弟单词的个数m
再输入数字k
输出描述:
根据输入,输出查找到的兄弟单词的个数m然后输出查找到的兄弟单词的第k个单词。另外这题还有一个边界条件判断:输入的兄弟单词索引号k超过兄弟单词总数时,只输出兄弟单词的总数

这题自己走的最大的弯路是:开始没有把判断兄弟单词写成函数,在对broWord和vec_words[i]进行排序比较时直接对原单词进行了操作,这样导致结果不对,应该采用中间变量缓存处理。写成函数后,排序比较变成局部变量的处理,因此不会影响到源实参。

教训:能封装成函数的就写成函数在内部处理

完整AC后的代码:

 #include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;bool isBroWord(string word1,string word2){    if(word1==word2)        return false;    sort(word1.begin(),word1.end());    sort(word2.begin(),word2.end());    return word1==word2;}int main(){   int wordCnt;   while(cin>>wordCnt){       int k;       string word;       vector<string> vec_words;       string broWord;       vector<string> vec_broWords;       for(int i=0;i<wordCnt;i++){           cin>>word;           vec_words.push_back(word);       }       //字典排序       sort(vec_words.begin(),vec_words.end());       cin>>broWord;       for(int i=0;i<vec_words.size();i++){            if(isBroWord(broWord,vec_words[i]))               vec_broWords.push_back(vec_words[i]);             }       cin>>k;       cout<<vec_broWords.size()<<endl;       if(vec_broWords.size()>=k)//边界判断           cout<<vec_broWords[k-1]<<endl;   }   return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表