题解 | #查找兄弟单词#

查找兄弟单词

https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68

#include <iostream>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;

/*定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。
兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?
注意:字典中可能有重复单词。
数据范围:1≤n≤1000 ,输入的字符串长度满足 1≤len(str)≤10  , 1≤k<n 
输入描述:
输入只有一行。 先输入字典中单词的个数n,再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k
输出描述:
第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。*/
bool brother_str(const string str1, const string str2)
{
	if (str1.length() != str2.length())
	{
		return false;
	}
	if (str1 ==str2)
	{
		return false;
	}
	//把str1分割成单个字符  看是否有能在str2中找到
	string strtemp = str1;
	string strtemp2 = str2;
	string strbuff;
	int pos;
	while (strtemp.length() != 0)
	{
		strbuff = strtemp.substr(0, 1);
		pos = strtemp2.find(strbuff); //找到这个字符在str2中的位置
		if (pos == -1)
		{
			return false;
		}
		//找到这个字符之后需要在str2这个字符串中把这个字符删除掉 不然会有重复
		//采用取代的方法
		strtemp2.replace(pos, 1, "");
		strtemp = strtemp.substr(1);
	}
	return true;
}
void str_maobao_up1(vector<string>& vec) //升序
{
	//冒泡
	string temp;
	for (int i = 0; i < vec.size(); i++)
	{
		for (int j = 1; j < vec.size(); j++)
		{
			if (vec[j - 1]>vec[j])
			{
				temp = vec[j];
				vec[j] = vec[j - 1];
				vec[j - 1] = temp;
			}
		}
	}
}
int main()
{
	string str;
	getline(cin, str);
	vector<string> vec;
	while (str.find(" ") != -1)
	{
		vec.push_back(str.substr(0,str.find(" ")));
		str = str.substr(str.find(" ") + 1);
	}
	vec.push_back(str);
	int n = stoi(vec[0]);   //用来确定有多少个单词
	vector<string> vec1; //n个字典单词
	string strdata = vec[vec.size() - 2];  //用来确认单词x
	int k = stoi(vec[vec.size()-1]);  //要输出的第k个单词
	for (int i=1; i < vec.size()-2; i++)
	{
		if (brother_str(vec[i],strdata))//true表示是兄弟函数
		{
			vec1.push_back(vec[i]);
		}
	}
	str_maobao_up1(vec1);
    cout << vec1.size() << endl;
	if (vec1.size() >=k)
	{
		cout << vec1[k - 1] << endl;
	}
	system("pause");
	return 0;
}

全部评论

相关推荐

想踩缝纫机的小师弟练...:不理解你们这些人,要放记录就把对方公司名字放出来啊。不然怎么网暴他们
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务