P1003 的解题思路
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 的解题思路相关推荐
- 2020考研 管理类联考数学 【题型分析及解题思路】
第一章 整式分式 1.若一元n次多项式A被(或者是B的因式)一元1次多项式B整除,求解A中的几个系数a,b(解题思路:代入法,让因式值为0,也可以配合多元多项式基本公式将复杂的B变成简单的几个一次多项 ...
- 2014计算机三级网络技术,2014计算机三级网络技术综合题解题思路
2014计算机三级网络技术综合题解题思路,全部自码 第一小题 IP地址的计算公式 正常IP地址计算:已知IP地址:子网掩码: 地址类别:A类地址:1-126(00)B类地址:128-191(10) C ...
- 2020腾讯广告算法大赛:赛题理解与解题思路
写在前面 期待已久的2020腾讯广告算法大赛终于开始了,本届赛题"广告受众基础属性预估".本文将给出解题思路,以及最完备的竞赛资料,助力各位取得优异成绩!!! 报名链接:https ...
- 2017年第六届数学中国数学建模国际赛(小美赛)C题解题思路
这篇文章主要是介绍下C题的解题思路,首先我们对这道C题进行一个整体的概括,结构如下: C题:经济类 第一问:发现危险人群. 发现:欺诈的方式开始.雇佣或浪漫的承诺. 数据→确定特定的经济萧条地区→确定 ...
- 剑指offer第二版答案详细版(带详细解题思路)
1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...
- 素数c语言程序解题思路,C语言上机实验题目解题思路.doc
上机实验题目解题思路 目录 第十三次实验:指针之一2 2453:步骤:2 2454:步骤:2 3575:步骤:方法同24543 3576:步骤:3 3580:步骤:3 3582:步骤:3 第十二次实验 ...
- java亲密数的解题思路,算法解题思路总结 - jjhgx的个人空间 - OSCHINA - 中文开源技术交流社区...
算法解题思路: 细读算法要求 找到极限情况 找到临界情况,结果依赖 找到最终的结束求解点 编程实现:考虑算法的空间复杂度和时间复杂度 案例说明: 假设: 输入字符串为:s, 长度为:slen, s的第 ...
- leetcode206.反转链表 解题思路(简单)
难度: 简单 题目:给你单链表的头结点head,请你反转链表,并返回反转后的链表. 示例1: 示例2: 示例3: 题目类型:数据结构链表 解题方法:双指针迭代法 解题思路: 1.申请两个新指针,分别指 ...
- LeetCode 中等难度 92. 反转链表 II解题思路
92. 反转链表 II 题目:中等难度 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4-& ...
最新文章
- Struts07---访问servlet的API
- 沈南鹏:从五大物理定律看新商业法则
- 查询工资最低的3名员工的职工工号、姓名和收入_普法课堂|你有多久没有收到工资条了?...
- 华为云大数据存储的冗余方式是三副本_华为TaurusDB技术解读(转载)
- 5分钟制作Unity过场动画 | Timeline
- ural 1066 uva 1555
- 假设拦截WebView的错误和OS升级到4.4后链接不能点击的问题
- 一篇文章理解Ext4文件系统的目录
- ppt中插入html格式图表
- win10访问不了win7文件服务器,win10和win7共享文件教程 win10和win7共享文件无法访问...
- 笑话:如果你在河边等待得足够久,你会看到你的敌人的尸体漂过,是怎么翻译出来的?
- 机器学习之朴素贝叶斯、贝叶斯信念网络
- 库克开怼谷歌和Facebook:自己搞的烂摊子,要会自己收拾
- 对贴片陶瓷电容材料的区分
- python从txt导入数据到CSV文件末尾行丢失
- keras 多输入多输出网络
- 10 款优雅的 Go 语言开发工具
- 饿了么技术往事(下)
- 那些创新是如何产生的?
- Oracle em13c安装手册