Ananagrams UVA - 156
问题
代码
// 算法竞赛入门经典系列源码解析
// 算法竞赛入门经典第2版 p114
// 算法竞赛入门经典 习题与解答
// 算法竞赛入门经典 训练指南
// 算法竞赛入门经典 算法实现
/*
Dreams never shine!
It's you that shine while chasing your dreams :)
JAYO!!
*/
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
map<string, int> cnt;
vector<string> words;
// 将单词"标准化"
string repr(const string& s) {
string ans = s; // copy原来的s
for (int i = 0; i < ans.length(); i++) {
ans[i] = tolower(ans[i]);
}
sort(ans.begin(), ans.end());
return ans;
}
string getWord(string& s) {
string ans = "";
for (auto mem : s) {
if (isalpha(mem)) ans += mem;
}
return ans;
}
int main()
{
int n = 0;
string s;
while (cin >> s) {
if (s[0] == '#') break;
s = getWord(s);
words.push_back(s); // 先保存下来,之后会作为map的键来查询值(出现的次数)
string r = repr(s);
if (!cnt.count(r)) cnt[r] = 0; // 先判断map中有没有这个r,没有的话,就添加进去, 并设值为0
cnt[r]++; // 之后再有相同的r,直接++
}
vector<string> ans;
for (int i = 0; i < words.size(); i++) {
if (cnt[repr(words[i])] == 1) ans.push_back(words[i]);
}
sort(ans.begin(), ans.end());
for (auto mem : ans) {
cout << mem << "\n";
}
return 0;
}
总结
加油,好好学,好好练!!!弥补差距!利用好手头的时间!抓住现在!