UVA-156 Ananagrams

题目连接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=92

题目大意:一个单词随便改变字母顺序后成为一个新单词,这个新单词不再这个单词所在的文章中,则该单词是ananagrams,你的任务就是要找到这样的单词并按字典顺序输出。

解题思路:我们可以先设置一个set容器,用来储存所有的单词,然后对每一个单词中的字母按从小到大排序,用map容器记录排序后单词的数量,如果随便改变单词中字母的顺序形成的新单词不是文章中的单词。则map中记录的值为1,这是就可以新建一个set容器储存结果,最后输出就可以了

AC代码:

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

int main()
{
	string a,b;
	set<string> word;//记录输入的单词 
	set<string> ans;//记录要输出的单词 
	map<string,int> sum_word;//记录排序后单词的数量;
	while(cin>>a)
	{
		b="";
		if(a=="#")
			break;
		word.insert(a);  
		for(int i=0;i<a.size();i++)//将输入的单词转换为小写 
			b+=tolower(a[i]);
		sort(b.begin(),b.end());//对字符串b进行排序
		sum_word[b]++;//记录排序后单词的数量	
	} 
	set<string>::iterator it;
	for(it=word.begin();it!=word.end();it++)//遍历,符合题意的单词加进ans中 
	{
		b="";
		for(int i=0;i<(*it).size();i++)
		{
			b+=tolower((*it)[i]);
		}
		sort(b.begin(),b.end());//对单词中字母排序 
		if(sum_word[b]==1)//如果等于1说明符合题意,加进去 
			ans.insert(*it);
	}
	for(it=ans.begin();it!=ans.end();it++)//输出结果 
		cout<<*it<<endl; 
	return 0; 
}

猜你喜欢

转载自blog.csdn.net/qq_40707370/article/details/82222336
今日推荐