记录所有单词重组后仍只出现过一次的单词。
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <map>
#include <iostream>
#include <algorithm>
using namespace std;
vector<string> words;
map<string, int> m;
string change(string s) {
string ans;
for (int i = 0; i < s.size(); ++i) {
ans += tolower(s[i]);
}
sort(ans.begin(), ans.end());
return ans;
}
int main() {
string s;
while (cin >> s) {
if (s[0] == '#') {
break;
}
words.push_back(s); // 存单词
string tmp = change(s); // 转换小写并排序
m[tmp]++; // 单词次数增加
}
vector<string> ans;
for (int i = 0; i < words.size(); ++i) {
if (m[change(words[i])] == 1) { // 如果只出现一次
ans.push_back(words[i]);
}
}
// 从小到大打印
sort(ans.begin(), ans.end());
for (int i = 0; i < ans.size(); ++i) {
cout << ans[i] << endl;
}
return 0;
}