UVa 156 Ananagrams

因为要字母重排,所以要把每一个单词标准化,即全部转化为小写字母后再进行排序。用map来统计标准化后的单词出现的次数,最后将值为1的单词加入到ans集合中。

(标准化必须是动态的,不能改变原来的单词!)

#include
#include
#include
#include
#include
#include
#include
using namespace std;

string s;
map cnt;
vector words;  //【不能】去重,所以用数组
set ans;  //不需要去重,但需要排序,可以用集合 

string repr(string s) {
	for (int i=0; i> s && s!="#") {
		words.push_back(s);
		string re=repr(s);   //这里减少调用次数以增加运行速度 
		if (!cnt.count(re)) cnt[re]=1;
		else cnt[re]++;
	}
	for (int i=0; i::iterator it = ans.begin(); it != ans.end(); it++)   //迭代器 
		cout << *it << endl;
		
	return 0;
 } 


你可能感兴趣的:(STL)