您的位置:首页 > 其它

华为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: