https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=92

给定若干单词,按字典序输出不存在重排的单词。(经测试,不包含重复的单词

重排单词:每个字母出现次数一样,但顺序不同,即对单词序列的一个排序

思路分析

是否满足重排可转换为等价问题:单词的构成字母与顺序无关,有两种解决思路(标准化

  • 字母计数:统计每个字母出现次数,若一致,说明满足重排
map<map<char,int>, int>dict; // 每个单词的字母出现次数->出现次数
  • 统一排序:都按升序排列,若得到相同序列,说明满足重排
map<string, int> dict; // 标准化单词->出现次数

因此在标准化单词(全转为小写)后,边可按照不同思路统计次数,并记录相应到旧单词映射

  • 定义set ans; 存储输出结果,自动按字典序排列

遍历每个标准化单词,若其出现次数为1,插入ans集合中,最后输出即可

AC代码(C++11,map标准化,顺序无关)

统一排序

#include<bits/stdc++.h>
using namespace std;
map<string, int> dict; // 标准化单词->出现次数
map<string, string> trans; // 单词字母出现次数->原单词
set<string> ans; // 存储输出结果,按字典序排列
string s, st;
int main() {
while (cin >>s && s!= "#") {
st = s;
for (auto& ch : st) // 转为小写
if (ch >= 'A' && ch <= 'Z') ch = tolower(ch); // 转为小写
sort(st.begin(), st.end()); // 升序排列,顺序无关
dict[st]++; // 统计次数
trans[st] = s; // 记录原单词
}
for (auto p : dict) if (p.second == 1) ans.insert(trans[p.first]); // 出现次数1表示非重排单词
for (auto& p : ans) cout <<p <<endl; // 直接输出剩下的单词
return 0;
}

字母计数

#include<bits/stdc++.h>
using namespace std;
map<map<char,int>, int>dict; // 每个单词的字母出现次数->出现次数
map<map<char,int>, string> trans; // 单词字母出现次数->原单词
set<string> ans; // 存储输出结果,按字典序排列
string s, st;
int main() {
while (cin >>s && s!= "#") {
st = s;
map<char, int> mp;
for (auto& ch : st) {
if (ch >= 'A' && ch <= 'Z') ch = tolower(ch); // 转为小写
mp[ch] ++; // 统计每个字符出现次数
}
dict[mp]++; // 统计次数
trans[mp] = s; // 记录原单词
}
for (auto p : dict) if (p.second == 1) ans.insert(trans[p.first]); // 出现次数1表示非重排单词
for (auto& p : ans) cout <<p <<endl; // 直接输出剩下的单词
return 0;
}

UVA 156 Ananagrams STL应用的更多相关文章

  1. UVa 156 Ananagrams(STL,map)

     Ananagrams  Most crossword puzzle fans are used to anagrams--groups of words with the same letters ...

  2. UVA 156 Ananagrams (STL multimap & set)

    原题链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=98&p ...

  3. uva 156 - Ananagrams (反片语)

    csdn:https://blog.csdn.net/su_cicada/article/details/86710107 例题5-4 反片语(Ananagrams,Uva 156) 输入一些单词,找 ...

  4. UVA 156 Ananagrams ---map

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

  5. UVa 156 Ananagrams

    题意:给出一些单词,在这些单词里面找出不能通过字母重排得到的单词(判断的时候不用管大小写),然后按照字典序输出. 学习的紫书的map= = 将每一个单词标准化 先都转化为小写,再排序(即满足了题目中说 ...

  6. STL语法——映射:map 反片语(Ananagrams,UVa 156)

    Description Most crossword puzzle fans are used to anagrams--groups of words with the same letters i ...

  7. 【UVA - 156 】Ananagrams (set,map,vector)

    Ananagrams  Descriptions: Most crossword puzzle fans are used to anagrams--groups of words with the ...

  8. 反片语(Ananagrams,Uva 156)

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

  9. Ananagrams UVA - 156

      Most crossword puzzle fans are used to anagrams - groups of words with the same letters in differe ...

  10. UVA 156:Ananagrams (vector+map+sort)

    题意:一大堆单词中间有空格隔开,以'#'结束输出,问只出现一次的的单词有哪些(如果两个具有相同的长度,相同的字母也算是相同的,不区分大小写,如:noel和lone属于一个单词出现两次).最后按照字典序 ...

随机推荐

  1. json数组根据某属性去重

    数据: let arry = [ {name: "张三", age: 23, work: '计算机'}, {name: "王五", age: 29, work: ...

  2. 【Android】使用litepal实现数据库的创建和升级

    1.配置litepal 配置过程见:2.进行创建和升级数据库,可以省略sql语句的录入 定义一个Note类,代码如下 接下来将note类添加到映射模型列表当中,修改litepal.xml中的代码.如下 ...

  3. Why Microservices ?

    微服务(Microservices)是一种软件架构设计风格,其中应用程序由一组小型.独立.自治的服务组成,这些服务共同工作以构建整体应用.每个服务都专注于一个特定的业务功能,可以独立部署.扩展和维护. ...

  4. 最好用的oa办公系统?

    OA办公系统是一种集成办公自动化.协同办公.信息管理等功能于一体的软件系统,旨在提高办公效率,优化流程管理,提供更好的团队协作和信息共享.下面将详细介绍几个目前市场上认为较为优秀的OA办公系统. 一. ...

  5. HoG / SIFT 学习指北

    本文 OI / ACM 无关. Explain HoG 原文出处: N. Dalal, and B. Triggs, Histograms of oriented gradients for huma ...

  6. 【matlab混沌理论】1.5.洛伦兹模型的分析

    洛伦兹方程用于生成y变量的图.这是对三种y初始条件敏感依赖的一个例子. 1.洛伦兹吸引子的y敏感依赖的着色图 input: % 洛伦兹方程用于生成y变量的图.x和z的初始条件保持不变,但y的初始条件在 ...

  7. C++ Qt开发:Tab与Tree组件实现分页菜单

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍tabWidg ...

  8. Kafka核心逻辑介绍

    1.概念 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica)分布式消息系统(kafka2.8.0版本之后接触了对zk的依赖,使用自己 ...

  9. 为什么许多数字孪生产品开始了GIS融合的尝试?

    随着数字孪生技术的发展,越来越多的产品意识到要实现数字孪生的最大价值,需要考虑多个维度的数据,包括空间信息.地理位置.环境条件等.因此,许多数字孪生产品开始了与GIS系统的融合尝试,以进一步提升其功能 ...

  10. 面试官:说说MVCC的执行原理?

    MVCC(Multi-Version Concurrency Control)是一种并发控制机制,用于解决数据库并发访问中,数据一致性问题.它通过在读写操作期间保存多个数据版本,以提供并发事务间的隔离 ...