zoukankan      html  css  js  c++  java
  • 反片语(Ananagrams , UVa 156)

    输入一些单词,找出所有满足如下条件的单词: 该单词不能通过字母重排,得到输入文本中的另一个单词。

    在判断是否满足条件时,字母不区分大小写,但在输出时应保留输入中的大小写,按字典序进行排序。

    (所有大写字母在所有小写字母的前面)

    样例输入:

    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

    #

    样例输出:

    Disk

    NotE

    derail

    drIed

    eye

    ladder

    soon

    分析:

    把每个单词标准化,即全部转化为小写字母后再进行排序,然后放到map中进行统计。

    代码如下:

    #include<iostream>
    #include<string>
    #include<cctype>
    #include<vector>
    #include<map>
    #include<algorithm>
    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] = 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] << "
    ";
        }
        return 0;
    }

    这个例子说明,没有良好的代码设计,是无法发挥STL的威力的。

    如果没有想到标准化这个思路,就很难用map简化代码。

    补充:

    set头文件中的set和map头文件中的map分别是集合和映射。二者都支持 insert、 find、count 和 remove操作,

    并且可以按照从小到大的顺序循环遍历其中的元素。

    map还提供了  [] 运算符,使得map可以像数组一样使用。事实上,map也称为关联数组。

  • 相关阅读:
    写在开篇——过往总结
    线程池原理实现
    MD5加密工具类
    跨域及jsonp
    四种xml的解析方式
    浅析正则表达式—(原理篇)
    用JavaScript添加选择按钮的背景颜色和juqery添加选择按钮的背景色
    怎么用JavaScript实现tab切换
    vue.js2.0:如何搭建开发环境及构建项目
    vscode如何用浏览器预览运行html文件
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/14136113.html
Copyright © 2011-2022 走看看