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