uva-156(Ananagrams UVA - 156)

map容器的模板题,判断是否能交换字母顺序变成另外一个单词,只需要先把单词都变成小写字母。然后再按字母字典序排序,放入map中进行计数,然后把计数为一的再放入另一个容器,再排序输出即可

我的代码(刘汝佳算法)

#include <bits/stdc++.h>
using namespace std;
deque<string> dq1,dq2;
map<string,int> cnt;
string tran(string a)
{
	for(int i=0;i<a.size();i++)
	a[i]=tolower(a[i]);
	sort(a.begin(),a.end());
	return a;
}
main()
{
	string s;
	while(cin>>s)
	{
		if(s[0]=='#')
		break;
		string ans=tran(s);
		dq1.push_back(s);
		if(!cnt.count(ans))
		cnt[ans]=0;
		cnt[ans]++;
	}
	for(int i=0;i<dq1.size();i++)
	if(cnt[tran(dq1[i])]==1)
	dq2.push_back(dq1[i]);
	sort(dq2.begin(),dq2.end());
	for(int i=0;i<dq2.size();i++)
	cout<<dq2[i]<<endl;
}
posted @ 2018-10-17 10:33  baccano!  阅读(189)  评论(0编辑  收藏  举报