Description

作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行是关键词列表,第二行是待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)

Input

第一行是关键词列表,第二行是待检查的句子。

Output

经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)

Sample Input 1

guns mines missiles
aameric ssell snug dan iimsssle ot sit neeemis

Sample Output 1

guns missiles

解题思路:首先比较待检查句子中的每一个单词的长度与每一个关键词的长度,在相同的情况下,再利用优先级队列,将该单词和关键词的每一个字母分别先后压入优先级队列中,即先将该单词的每一个字母压入一个优先级队列,然后用一个string对象接收该优先级队列弹出的字符串,关键词亦然;接着通过比较接收的两个string对象是否相同,相同则表示该单词为关键词;最后将找到的所有关键词以字典序输出。结束!!!

源代码:

#include<iostream>
#include<string>
#include<vector>
#include<queue>
using namespace std;

class QY
{
private:
    vector<string> S;
    priority_queue<string, vector<string>, greater<string> > out;
    priority_queue<char, vector<char>, greater<char> >T;

public:
    QY() {
        string str;
        getline(cin, str);
        string ch = "";
        for (int i = 0; i < str.size(); i++) {
            if (str[i] == ' ') {
                S.push_back(ch);
                ch = "";
            }
            else {
                ch += str[i];
            }
        }
        S.push_back(ch);

getline(cin, str);
        ch = "";
        for (int i = 0; i < str.size(); i++) {
            if (str[i] == ' ') {
                for (int j = 0; j < S.size(); j++) {
                    if (ch.size() == S[j].size()) {
                        string s1 = "", s2 = "";
                        for (int k = 0; k < ch.size(); k++) {
                            T.push(ch[k]);
                        }
                        while (!T.empty()) {
                            s1 += T.top();
                            T.pop();
                        }
                        for (int k = 0; k < S[j].size(); k++) {
                            T.push(S[j][k]);
                        }
                        while (!T.empty()) {
                            s2 += T.top();
                            T.pop();
                        }
                        if (s1 == s2) {
                            //cout << S[j] << " ";
                            out.push(S[j]);
                        }
                    }
                }
                ch = "";
            }
            else {
                ch += str[i];
            }
        }

//判断最后一个单词
        for (int j = 0; j < S.size(); j++) {
            if (ch.size() == S[j].size()) {
                string s1 = "", s2 = "";
                for (int k = 0; k < ch.size(); k++) {
                    T.push(ch[k]);
                }
                while (!T.empty()) {
                    s1 += T.top();
                    T.pop();
                }
                for (int k = 0; k < S[j].size(); k++) {
                    T.push(S[j][k]);
                }
                while (!T.empty()) {
                    s2 += T.top();
                    T.pop();
                }
                if (s1 == s2) {
                    //cout << S[j];
                    out.push(S[j]);
                }
            }
        }
        while (!out.empty()) {
            if (out.size() == 1) {
                cout << out.top();
                out.pop();
            }
            else {
                cout << out.top() << " ";
                out.pop();
            }
        }
    }

};
int main()
{
    QY *Q = new QY();
    return 0;
}

P1003 的解题思路相关推荐

  1. 2020考研 管理类联考数学 【题型分析及解题思路】

    第一章 整式分式 1.若一元n次多项式A被(或者是B的因式)一元1次多项式B整除,求解A中的几个系数a,b(解题思路:代入法,让因式值为0,也可以配合多元多项式基本公式将复杂的B变成简单的几个一次多项 ...

  2. 2014计算机三级网络技术,2014计算机三级网络技术综合题解题思路

    2014计算机三级网络技术综合题解题思路,全部自码 第一小题 IP地址的计算公式 正常IP地址计算:已知IP地址:子网掩码: 地址类别:A类地址:1-126(00)B类地址:128-191(10) C ...

  3. 2020腾讯广告算法大赛:赛题理解与解题思路

    写在前面 期待已久的2020腾讯广告算法大赛终于开始了,本届赛题"广告受众基础属性预估".本文将给出解题思路,以及最完备的竞赛资料,助力各位取得优异成绩!!! 报名链接:https ...

  4. 2017年第六届数学中国数学建模国际赛(小美赛)C题解题思路

    这篇文章主要是介绍下C题的解题思路,首先我们对这道C题进行一个整体的概括,结构如下: C题:经济类 第一问:发现危险人群. 发现:欺诈的方式开始.雇佣或浪漫的承诺. 数据→确定特定的经济萧条地区→确定 ...

  5. 剑指offer第二版答案详细版(带详细解题思路)

    1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...

  6. 素数c语言程序解题思路,C语言上机实验题目解题思路.doc

    上机实验题目解题思路 目录 第十三次实验:指针之一2 2453:步骤:2 2454:步骤:2 3575:步骤:方法同24543 3576:步骤:3 3580:步骤:3 3582:步骤:3 第十二次实验 ...

  7. java亲密数的解题思路,算法解题思路总结 - jjhgx的个人空间 - OSCHINA - 中文开源技术交流社区...

    算法解题思路: 细读算法要求 找到极限情况 找到临界情况,结果依赖 找到最终的结束求解点 编程实现:考虑算法的空间复杂度和时间复杂度 案例说明: 假设: 输入字符串为:s, 长度为:slen, s的第 ...

  8. leetcode206.反转链表 解题思路(简单)

    难度: 简单 题目:给你单链表的头结点head,请你反转链表,并返回反转后的链表. 示例1: 示例2: 示例3: 题目类型:数据结构链表 解题方法:双指针迭代法 解题思路: 1.申请两个新指针,分别指 ...

  9. LeetCode 中等难度 92. 反转链表 II解题思路

    92. 反转链表 II 题目:中等难度 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4-& ...

最新文章

  1. Struts07---访问servlet的API
  2. 沈南鹏:从五大物理定律看新商业法则
  3. 查询工资最低的3名员工的职工工号、姓名和收入_普法课堂|你有多久没有收到工资条了?...
  4. 华为云大数据存储的冗余方式是三副本_华为TaurusDB技术解读(转载)
  5. 5分钟制作Unity过场动画 | Timeline
  6. ural 1066 uva 1555
  7. 假设拦截WebView的错误和OS升级到4.4后链接不能点击的问题
  8. 一篇文章理解Ext4文件系统的目录
  9. ppt中插入html格式图表
  10. win10访问不了win7文件服务器,win10和win7共享文件教程 win10和win7共享文件无法访问...
  11. 笑话:如果你在河边等待得足够久,你会看到你的敌人的尸体漂过,是怎么翻译出来的?
  12. 机器学习之朴素贝叶斯、贝叶斯信念网络
  13. 库克开怼谷歌和Facebook:自己搞的烂摊子,要会自己收拾
  14. 对贴片陶瓷电容材料的区分
  15. python从txt导入数据到CSV文件末尾行丢失
  16. keras 多输入多输出网络
  17. 10 款优雅的 Go 语言开发工具
  18. 饿了么技术往事(下)
  19. 那些创新是如何产生的?
  20. Oracle em13c安装手册

热门文章

  1. matlab colarbar设置,matlab color bar 如何改变色调
  2. 用Mailgun邮寄出去!
  3. Spark6:Spark Steaming
  4. 电脑时间倒流,程序拒绝穿越:应用程序发生异常 未知的软件异常(0xe06d7363)
  5. AMD:无限你我的无限
  6. 物联网卡零售应用的真实案例
  7. hr常见面试题及答案
  8. Unity用Animation组件制作简单的动画
  9. 抱薪者说 | 薪火相传,薪之不绝,火亦不熄
  10. 用python做动画的代码_Python应用 | 三行代码实现GIF动画