一个FLAG #12# 反片语

例题5-3 反片语(Ananagrams, UVa 156)完整题目见参考[1]

思路:首先把未标准化的单词逐个存到一个vector中,在存的过程中,将标准化后的单词,例如RIDE标准化后是deir,通过map存储并统计其出现的次数。然后根据map中所存储的信息进一步从第一个vector中筛选出符合条件的答案,存储到另外一个vector中,最后排序,输出。

#include <iostream>
#include <string>
#include <cctype>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

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

// 将单词标准化 
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] << "\n";
    }
    return 0;
}

 

参考

[1] 反片语(map) - Not-Bad - 博客园

[2] c++ stl 关于map的find和count的使用 - sugarbliss - CSDN博客

[3] STL教程:C++ STL快速入门(非常详细)

原文链接: https://www.cnblogs.com/xkxf/p/12671847.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    一个FLAG #12# 反片语

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/341176

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午12:57
下一篇 2023年3月2日 上午12:58

相关推荐