题目描述:(题目来源牛客网)
实现一个可以存储若干个单词的字典,用户可以
1.在字典中加入单词
2.查找指定单词在字典中的兄弟单词个数
3.查找指定单词的指定序号的兄弟单词,指定序号指字典中兄弟单词按字典顺序排序后的序号
4.清空字典中的所有单词
定义、格式说明
单词:
由小写英文字母组成,不含其它字符
兄弟单词:
给定一个单词X,如果通过任意交换单词中字母的位置得到不同的单词Y,那么定义Y是X的兄弟单词
字典顺序:
两个单词(字母按照自左向右顺序),先以第一个字母作为排序的基准,如果第一个字母相同,就用第二个字母为基准,如果第二个字母相同就以第三个字母为基准。依次类推,如果到某个字母不相同,字母顺序在前的那个单词顺序在前。如果短单词是长单词从首字母开始连续的一部分,短单词顺序在前。
**举例:**bca是abc的兄弟单词;abc与abc是相同单词,不是兄弟单词
规格:
0<=字典中所含单词个数<=1000
1<=单词所含字母数<=50
字典中可能有重复单词
>输入:
先输入字典中单词的个数,再输入n个单词作为字典单词。
输入一个单词,查找其在字典中兄弟单词的个数
再输入数字n这里是引用
>输出:
根据输入,输出查找到的兄弟单词的个数
示例:
输入:3 abc bca cab abc 1
输出:2
bca
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool isBrother(string str1, string str2){
if(str1.size() == str2.size()){ //先判定长度是否相同
if(str1 == str2)//再判定字符串是否完全相同
return false;
sort(str1.begin(), str1.end()); //将两个单词排序
sort(str2.begin(), str2.end());
if(str1 == str2)
return true;
}
return false;
}
int main(){
int n;
while (cin >> n){
string str;
string word, s;
int index;
vector<string> v;
for(int i = 0; i < n; ++i){
cin >> str;
v.push_back(str); // 读取字典中的单词, 把字典放到 vs 中.
}
sort(v.begin(), v.end());
cin >> word; // 输入要判定的词和k
cin >> index;
int counts = 0;
for(int i = 0; i < n; ++i){ // 兄弟单词计数
if(isBrother(word, v[i])){
counts ++;
if(counts == index) //保存单词
s = v[i];
}
}
if(!v.empty()) //打印输出
cout << counts << endl;
if(counts >= index)
cout << s << endl;
}
return 0;
}