查找兄弟单词

题目描述:(题目来源牛客网)
实现一个可以存储若干个单词的字典,用户可以
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; 
} 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值