当前位置: 首页 > article >正文

P8630 [蓝桥杯 2015 国 B] 密文搜索--map、substr

P8630 [蓝桥杯 2015 国 B] 密文搜索

    • 题目
  • 解析
    • 注意substr第二个参数是长度
    • 代码

题目

在这里插入图片描述

解析

题意:密码是给出字符串S的乱序,我们需要找到有哪几个位置能够匹配密码,返回能在S中的匹配次数。

这里我们可以看作哈希,但是密码是字符串,常规数组显然不能满足。
于是我们得引入字典:map【让唯一的密码做:键,让出现次数作为值】

因为给出的密码是乱序,所以我们在存入map时先利用sort进行排序,然后值++。

为什么要先排序?因为只要字符的数量相同,那么密码就一定是S中的乱序

最后我们遍历S,一次截取8个长度,然后加上相应键的值,因为不是密码的值为0=没加

注意substr第二个参数是长度

string a = s.substr(i, 8);(第二个参数是长度!!!)
//substr中的第一个参数是起始位置,第二个参数是长度【与sort不同】

代码

#include <iostream>
#include <vector>
#include <set>
#include <string>
#include <cstring>
#include <algorithm>
#include <math.h>
#include <queue>
#include <climits>  // 包含INT_MAX常量
#include <cctype>
#include <map>
using namespace std;
int n, ans;
string s;
map<string, int> mp;//字典string:为键,int:为值

int main() {
	cin >> s >> n;
	for (int i = 0; i < n; i++) {
		string x;
		cin >> x;
		sort(x.begin(), x.end());
		mp[x]++;
	}
	for (int i = 0; i < s.size() - 7; i++) {
		string a = s.substr(i, 8);
		//substr中的第一个参数是起始位置,第二个参数是长度【与sort不同】
		sort(a.begin(), a.end());
		ans += mp[a];
	}
	cout << ans;
	return 0;
}

http://www.kler.cn/a/580814.html

相关文章:

  • 大型语言模型为何看不懂电路图:局限性分析
  • OpenHarmony 5.0.0 Release
  • 【算法 C/C++】二维前缀和
  • 蓝桥杯备赛-差分-重新排序
  • 逻辑回归实战——银行贷款案例初步实现
  • MoonSharp 文档四
  • ESP32S3N16R8驱动ST7701S屏幕(vscode+PlatfoemIO)
  • C#程序结构及基本组成说明
  • 【MySQL_06】表的相关操作
  • 2025年渗透测试面试题总结-华顺某信安-安全服务工程师(题目+回答)
  • 1分钟看懂React的那些Hook‘s
  • Python:函数(一)
  • UIToolkit(一)
  • cursor mcp 在windows下配置
  • MySQL 索引技术指南
  • 《Mycat核心技术》第19章:基于MySQL实现读写分离
  • 深度学习双向RNN
  • 从 “12.3” 的崩溃到完美的解决方案:一场类型选择的冒险之旅
  • 计算机导论——CS50
  • 大空间多人互动技术、大空间LBE、VR大空间什么意思?如何实现?