当前位置:网站首页>题解 Ananagrams(UVa156)紫书P113map的应用
题解 Ananagrams(UVa156)紫书P113map的应用
2022-06-28 20:27:00 【Love_Jacques】
紫书P113;map的应用;UVa146 Ananagrams;
题目大意:
输入一些单词(输入包含若干行,每行不超过80个字符,由一些单词组成。单词由不超过20个大小写字母组成),找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本的另外一个单词。在判断是否满足条件时,字母不分大小写,但在输出时应保留输入的大小写,按字典序排列。
Sample Input
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
Sample Output
Disk
NotE
derail
drIed
eye
ladder
soon
题目分析(思路依据紫书):
题目要求找出 “不重复” 的单词,那么如何判断 “重复” 是本题的重点;
题目中给的 “重复” 的含义是指:具有相同数量的相同字母构成的两个单词,对字母顺序没有要求。
数据结构选择:由于map具有值对应键的特性,可以方便的帮我们统计出每种单词出现的次数,便于去重,我们可以选择建立一个map来存放不同单词出现的次数。
算法设计:map的合理使用可以帮我们简化代码,但我们仍需要一种可以高效利用map的方法来实现对目标的选择;既然题目要求的 “重复” 没有规定字母顺序,那我们可以把单词中字母的顺序统一化处理来方便比较:将字母全部转化为小写并按照字典序排序;
void change(string& now)
{
for(int i=0;i<now.length();i++)
now[i]=tolower(now[i]);
sort(now.begin(),now.end());
return ;
}
之后依据统一化后的单词进行比较;
模块设计:定义与预处理–输入与初始化–模拟判断–输出–return 0;
代码:
#include<map>
#include<iostream>
#include<string>
#include<cctype>
#include<vector>
#include<algorithm>
using namespace std;
vector<string> txt;
map<string,int> words;
vector<string> answer;
string s;
//txt存读入的全部单词,words存初始化后的单词与其出现次数,answer存只出现过一次的单词
void change(string& now);
int main()
{
while(cin>>s)
{
if(s=="#") break; //遇到#结束读入
txt.push_back(s);
string now(s);
change(now); //初始化
words[now]++; //统计次数
}
for(int i=0;i<txt.size();i++)
{
string now(txt[i]);
change(now);
if(words[now]==1) answer.push_back(txt[i]);
}
sort(answer.begin(),answer.end()); //输出要求按照字典序排序
for(int i=0;i<answer.size();i++) cout<<answer[i]<<endl;
return 0;
}
void change(string& now)
{
for(int i=0;i<now.length();i++)
now[i]=tolower(now[i]);
sort(now.begin(),now.end());
return ;
}
要点与细节总结:
- 灵活利用map中键与值的对应关系,根据场景合理选择;
- sort使用的两种情况<1.
sort(a,a+n)<2.sort(m.begin(),m.end());
更新于2020.6.24
边栏推荐
猜你喜欢

Win 10 create a gin framework project

C # connect to the database to complete the operation of adding, deleting, modifying and querying

ref属性,props配置,mixin混入,插件,scoped样式

2022 welder (elementary) special operation certificate examination question bank and answers

学习太极创客 — MQTT 第二章(八)ESP8266 MQTT 用户密码认证

UESTC (shenhengtao team) & JD AI (Mei Tao team) proposed a structured dual stream attention network for video Q & A, with performance SOTA! Better than the method based on dual video representation

2022年P气瓶充装考试练习题及在线模拟考试

ThreadLocal原理

Visualization of neural network structure in different frames

【毕业季·进击的技术er】努力只能及格,拼命才能优秀!
随机推荐
Win 10 create a gin framework project
市值1200亿美金,老牌财税巨头Intuit是如何做到的?
2022年P气瓶充装考试练习题及在线模拟考试
TcWind 模式設定
522. 最长特殊序列 II(贪心&双指针)
圆球等的相关计算
CSDN salary increase technology selenium automated test stack summary
ANR分析--问题1
我也差点“跑路”
2022 P cylinder filling test exercises and online simulation test
Resilience4j retry source code analysis and retry index collection
ROS中quaternion四元數和歐拉角轉換
522. longest special sequence II (greedy & double pointer)
管道 | 与重定向 >
RT-Thread线程同步与线程通信
bluecmsv1.6代码审计
QSP读取标签配置错误问题
oracle delete误删除表数据后如何恢复
1. 整合 Servlet
【学习笔记】聚类分析