蓝桥杯 16. 密文搜索

密文搜索

原题目链接

题目描述

福尔摩斯从 X 星收到一份资料,全部是小写字母组成。

他的助手提供了另一份资料:许多长度为 8 的密码列表。

福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的。

请你编写一个程序,从第一份资料中搜索可能隐藏密码的位置。要考虑密码的所有排列可能性。


输入描述

  • 第一行:一个字符串 s,全部由小写字母组成,长度小于 1024×1024。
  • 第二行:一个整数 n,表示以下有 n 行密码,1 ≤ n ≤ 1000
  • 接下来 n 行,每行是一个字符串,均由小写字母组成,长度都为 8。

输出描述

输出一个整数,表示每行密码的所有排列在 s 中匹配次数的总和。


输入输出样例

输入

in 复制代码
aaaabbbbaabbcccc
2
aaaabbbb
abcabccc

输出

out 复制代码
4

c++代码

cpp 复制代码
#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个字符,判断是否能通过乱序排列组成密码,匹配就计数。

相关推荐
卡卡卡卡罗特2 小时前
每日mysql
数据结构·算法
chao_7892 小时前
二分查找篇——搜索旋转排序数组【LeetCode】一次二分查找
数据结构·python·算法·leetcode·二分查找
蜉蝣之翼❉3 小时前
CRT 不同会导致 fopen 地址不同
c++·mfc
aramae3 小时前
C++ -- STL -- vector
开发语言·c++·笔记·后端·visual studio
lifallen3 小时前
Paimon 原子提交实现
java·大数据·数据结构·数据库·后端·算法
lixzest3 小时前
C++ Lambda 表达式详解
服务器·开发语言·c++·算法
EndingCoder3 小时前
搜索算法在前端的实践
前端·算法·性能优化·状态模式·搜索算法
丶小鱼丶3 小时前
链表算法之【合并两个有序链表】
java·算法·链表
不吃洋葱.4 小时前
前缀和|差分
数据结构·算法
_Chipen4 小时前
C++基础问题
开发语言·c++