题目大意:

输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序排列。


题目(提交)链接→UVa-156
没使用过该网站的同学请猛戳这里→vJudge教程


储备知识:

1、标准化:
将一个字符串中所有字母化简为小写,并按其字典序排列的过程叫标准化。
2、map的基本用法→map头文件函数详解
3、tolower函数出处→ctype头文件函数详解
4、sort、count函数出处→algorithm头文件函数详解

分析:

此题大水题,想要做出来不难,但如果想找到最优解,难度就上升一个档次了。尤其是map+vector配合标准化的写法,以及最后以空间换时间的思想,都是值得借鉴和学习的。

思路:

vector1存放输入串,将每个串的标准化存入map.key,出现次数存入map.value;输入结束后遍历vector1与map1,若vector1中串出现次数等于1,就存入vector2串。 最后给vector2串排序,输出。

代码:

#include <bits/stdc++.h>
using namespace std;map<string,int> cnt;
vector<string> words;//将单词s进行“标准化”
string repr(const string& s) {  //传递参数时加const可以避免参数被意外修改 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;
}

收获:

1、map映射的用法
2、标准化的用法

算法竞赛入门经典(第二版) | 例题5-4 反片语 (map+标准化)(UVa156,Ananagrams)相关推荐

  1. 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法二)

    本着清晰明了易懂可以水两篇 的理念,笔者将这道题分两次发布.这是第二种解法. 第一种解法传送门→解法一+提交网址 因为解法1中有详细关于题目和输入输出格式等的介绍,这里就不过多赘述了. 分析: 一些初 ...

  2. 算法竞赛入门经典(第二版) | 例题4-3 救济金发放 (UVa133,The Dole Queue)

    提目(提交)链接→UVa-133 百度翻译→百度翻译 没使用过该网站的同学请猛戳这里→vJudge教程 分析: 最开始的固有思维是循环就用循环链表,其实完全可以把它看成一个大一点的周期类型题(一个大周 ...

  3. 算法竞赛入门经典(第二版) | 例题4-2 刽子手游戏 (UVa489,Hangman Judge)

    大家站在出题者的角度考虑,我们出了一道大水题,会让它又臭又长或是用复杂的函数吗? 不会.所以做这种题千万不要想得太复杂.循环+数组足矣. 提目(提交)链接→UVa-489 百度翻译→百度翻译 没使用过 ...

  4. 算法竞赛入门经典(第二版) | 例题5-3 安迪的第一个字典 (紫书牛啤!)(UVa10815,Andy's First Dictionary)

    概述: 输入一个文本,找出所有不同的单词,按字典序排序,去重后,输出,单词不分大小写. 储备知识: 1.sstring头文件的用法→sstring头文件函数详解 2.cctype头文件的用法→ccty ...

  5. 算法竞赛入门经典(第二版) | 例题5-2 木块问题 (紫皮书牛啤!)(UVa101,The Blocks Problem)

    大意: 输入n,代表n个木块,输入最多n种操作类型,按类型对木块进行操作,读入quit结束 输入输出格式: 1.move a onto b:将a和b所在上方的方块先归位,再将a移到b所在柱子 2.mo ...

  6. 算法竞赛入门经典(第二版) | 例题5-1 大理石在哪 (普适查找)(UVa10474,Where is the Marble?)

    大意: 给一序列,要求先将序列排序.再给n个数字,找到每个数字在序列中的位置 储备知识→algorithm头文件函数详解 题目(提交)网址→UVa-10474 百度翻译→百度翻译 没使用过该网站的同学 ...

  7. 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法一)

    大意 输入:r(行)c(列)n(种操作)m(个行/列),给出具体行/列 x(个坐标),给出具体坐标. 输出:m个坐标经过n种操作后分别移动到了哪里. 注意:所有操作都是根据原始表进行的,如:1,2,3 ...

  8. 算法竞赛入门经典(第二版) | 例题4-4 信息解码 (紫皮书牛啤!)(UVa213,Message Decoding)

    大意: 二进制编码中取前三位,得到编码长度为n(0<=n<=7), 按此长度重复截取编码中剩余部分(n位一截),直到读取n个1结束.再次取三位,长度为n,重复上述操作-直至n个1后接000 ...

  9. UVA-12171 雕塑 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题目在<算法竞赛入门经典第二版>书中标注了星号,也是第一道出现星号的 ...

最新文章

  1. python对于办公有什么帮助-日常工作中python能够有哪些帮助?
  2. 第五课 路由之初识路由
  3. CAP理论与MongoDB一致性、可用性的一些思考
  4. linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...
  5. 2.4g和5g要不要合并_请问千兆路由器,2.4g与5g是双频合一还是分开,该选择哪个?...
  6. 面试常考题:不调用库函数,怎样实现字符串操作函数?
  7. [C] memset 初始化结果全为 -1
  8. bzoj2783: [JLOI2012]树
  9. 50个提高会话技巧的方法 (转IT经理人)
  10. 好用的服务器终端,推荐7款超级好用的终端工具 —— SSH+FTP
  11. 信息系统项目管理师之选择题、案例分析题备考
  12. 华三基础命令(单臂,超级vlan,远程,聚合)
  13. matlab推挽用的变压器,推挽逆变+全桥整流~~~~逆变器变压器设计
  14. 支付宝App支付源码
  15. 成功实现有线路由器和无线路由器连接上网
  16. js12---闭包,原型,继承
  17. 高数知识梳理——函数的连续性与间断点
  18. python剔除数据_python实现对excel进行数据剔除操作实例
  19. 基于切比雪夫空间距离的空间跳跃体绘制加速方法(Empty Space Skipping-ESS)
  20. 一文读懂Apache Kylin(麒麟)

热门文章

  1. ​Hmily重启后月度报告
  2. 2021年,戴尔的显示器竟然出现了弹出式摄像头
  3. 腾讯V265编码器:给用户以完备的265体验
  4. 2018年是VR的新机会吗?
  5. JVM之堆Heap参数调优入门
  6. 操作系统与存储:解析Linux内核全新异步IO引擎io_uring设计与实现
  7. 疫情下的情人节怎么过?Serverless在线课堂来支招
  8. 令人惊叹的前端路由原理解析和实现方式
  9. 移动直播连麦实现思路:整体篇
  10. TensorFlow MNIST (Softmax)