蓝桥杯 16. 密文搜索
密文搜索
原题目链接
题目描述
福尔摩斯从 X 星收到一份资料,全部是小写字母组成。
他的助手提供了另一份资料:许多长度为 8 的密码列表。
福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的。
请你编写一个程序,从第一份资料中搜索可能隐藏密码的位置。要考虑密码的所有排列可能性。
输入描述
- 第一行:一个字符串
s
,全部由小写字母组成,长度小于 1024×1024。 - 第二行:一个整数
n
,表示以下有n
行密码,1 ≤ n ≤ 1000
。 - 接下来
n
行,每行是一个字符串,均由小写字母组成,长度都为 8。
输出描述
输出一个整数,表示每行密码的所有排列在 s
中匹配次数的总和。
输入输出样例
输入
aaaabbbbaabbcccc
2
aaaabbbb
abcabccc
输出
4
c++代码
#include<bits/stdc++.h>using namespace std;int main() {string str, s;cin >> str;int n, cont = 0;cin >> n;vector<string> mid;while(n--) {cin >> s;sort(s.begin(), s.end());mid.push_back(s);}for (int i = 0; i < str.size() - 7; i++) {s = str.substr(i, 8);sort(s.begin(), s.end());for (string k : mid) {if (k == s) cont++;}}cout << cont;return 0;
}//by wqs
题目解析
在字符串 s
中,用滑动窗口,每次取连续8个字符,判断是否能通过乱序排列组成密码,匹配就计数。