反片语,紫书P113UVa156

来源:互联网 发布:大话数据库 pdf 编辑:程序博客网 时间:2024/05/17 09:44

本题思路非常直接,并没有什么技巧,只能将所有词读入进行“标准化”(变成小写并排序)处理,来计算所有可以相互转换的单词的个数。统计之后还得进行二次遍历,二次标准化找到那些只出现一次的才是答案。
本题主要练习map容器,关联数组的使用。
以及sort可以对vector words;直接进行排序。

// UVa156 Ananagrams// Rujia Liu#include<iostream>#include<string>#include<cctype>#include<vector>#include<map>#include<algorithm>using namespace std;map<string,int> cnt;vector<string> words;string repr(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] << "\n";  return 0;}
原创粉丝点击