Ananagrams(反片语)【map的应用】P114

中文题意:输入一些单词,找出满足如下条件的单词:该单词不能通过字母重排,得到文本中的另一个单词。在判断是否满足条件时,字母不分大小写,但在输出是应保留输入中的大小写,按字典序进行排序(所有大写字母在所有小写字母的前面)。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
#
#include<bits/stdc++.h>
using namespace std;

map<string,int>cnt;
vector<string>words;

//将单词s进行“标准化”
string repr(const string &s)
{
    string ans=s;
    for(int i=0;i<ans.length();i++)
    {
        ans[i]=towlower(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]<<endl;
    }
    return 0;
}

map和set两种容器的底层结构都是红黑树,所以容器中不会出现相同的元素,因此count()的结果只能为0和1,可以以此来判断键值元素是否存在(当然也可以使用find()方法判断键值是否存在)。

拿map<key,value>举例,find()方法返回值是一个迭代器,成功返回迭代器指向要查找的元素,失败返回的迭代器指向end。count()方法返回值是一个整数,1表示有这个元素,0表示没有这个元素。

原文地址:https://www.cnblogs.com/laoyangtou/p/8641389.html

时间: 2024-10-11 20:45:52

Ananagrams(反片语)【map的应用】P114的相关文章

uva 156 - Ananagrams (反片语)

csdn:https://blog.csdn.net/su_cicada/article/details/86710107 例题5-4 反片语(Ananagrams,Uva 156) 输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文 本中的另外一个单词. 在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中 的大小写,按字典序进行排列(所有大写字母在所有小写字母的前面). Sample Input ladder came tape soon leader ac

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

Description Most crossword puzzle fans are used to anagrams--groups of words with the same letters in different orders--for example OPTS, SPOT, STOP, POTS and POST. Some words however do not have this attribute, no matter how you rearrange their lett

反片语(map)

输入一些单词,找出所有满足如下条件的单词: 该单词不能通过字母重排,得到输入文本中的另外一个单词. 在判断是否满足条件时,不区分大小写,但输出保留输入中的大小写,按字典序进行排列(所有大写字母在小写字母的前面) 样例输入: ladder came tape soon leader acme RIDE lone Dreis peat ScALE orb eye Rides dealer NotE derail LaCeS drIed noel dire Disk mace Rob dires #

uva156反片语

背景:学习stl过程中遇到的简单题,但我不会. 思路:将单词标准化,然后就可以运用映射map了. #include <iostream> #include <string> #include <cctype> #include <vector> #include <map> #include <algorithm> using namespace std; map<string,int> cnt; vector<st

c++ STL 映射:map

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的. 功能:建立key-value的映射  key与value是任何你需要的类型  exp:map<char,int>

UVA156 Ananagrams

问题链接:UVA156 Ananagrams. 题意简述:输入一个文本文件,从中提取出一些单词输出,输出的单词按照文本文件中的原来样子输出(字母大小写不变).对于所有的单词,若字母不分大小写,单词经过重排顺序,与其他单词相同,这些单词则不在输出之列. 这个问题用C++语言编写程序,主要是为了练习使用STL的功能.另外一点,C++编写程序效率会更高. 程序中,使用了容器类map和vector.其他都是套路. AC的C++语言程序如下: /* UVA156 Ananagrams */ #includ

ceph之crush map

编辑crush map: 1.获取crush map: 2.反编译crush map: 3.至少编辑一个设备,桶, 规则: 4.重新编译crush map: 5.重新注入crush map: 获取crush  map 要获取集群的crush map,执行命令: ceph osd  getcrushmap -o {compiled-crushmap-filename} ceph将crush输出(-o)到你指定的文件,由于crush map是已编译的,所以需要反编译: 反编译crush map 要反

23.each和map函数

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script src="jquery-3.3.1.min.js"></script> <script> $(function () { //each方法跟for循环实现的效果是一样的

算法入门经典 第五章

例题5-4 反片语 输入一些单词(以"#"为结束标志),找出所有满足如下条件的单词:该单词不能通过字母的重排,得到输入文本中的另一个单词.在判断是否满足条件是不分大小写,但是在输出时应保留输入时的大小写,按字典序进行排列(所有大写字母在所有小写字母前面). Sample input ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Rides dealer NotE derail LaCeS drI