题意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序进行排列(所有大写字母在所有小写字母的前面)。
刘汝佳算法竞赛入门经典(第二版)P113
#include <cstdio> #include <map> #include <set> #include <string> #include <vector> #include <algorithm> #include <cctype> #include <iostream> using namespace std; 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; } map<string,int> cnt; vector<string> words; 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]<<endl; return 0; } /* ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Rides dealer Note derail LaCes drIed noel dire Disk mace Rob dries # */