题
例题5-3 反片语(Ananagrams, UVa 156)完整题目见参考[1]
思路:首先把未标准化的单词逐个存到一个vector中,在存的过程中,将标准化后的单词,例如RIDE标准化后是deir,通过map存储并统计其出现的次数。然后根据map中所存储的信息进一步从第一个vector中筛选出符合条件的答案,存储到另外一个vector中,最后排序,输出。
#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; for (int i = 0; i != ans.length(); ++i) { ans[i] = tolower(ans[i]); } sort(ans.begin(), ans.end()); return ans; } int main() { int n = 0; string s; while (cin >> s) { if (s[0] == '#') break; words.push_back(s); string r = repr(s); if (!cnt.count(r)) cnt[r] = 0; cnt[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 (int i = 0; i != ans.size(); ++i) { cout << ans[i] << " "; } return 0; }