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

相关推荐
Lhan.zzZ6 小时前
笔记_2026.4.28_004
c++·ide·笔记·qt
wuminyu8 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
木喃的井盖9 小时前
无锁队列细节
c++·工程
王老师青少年编程9 小时前
csp信奥赛C++高频考点专项训练之字符串 --【字符串基础】:输出亲朋字符串
c++·字符串·csp·高频考点·信奥赛·专项训练·输出亲朋字符串
MediaTea9 小时前
AI 术语通俗词典:C4.5 算法
人工智能·算法
Navigator_Z10 小时前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
WBluuue10 小时前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
风筝在晴天搁浅10 小时前
n个六面的骰子,扔一次之后和为k的概率是多少?
算法
KuaCpp10 小时前
C++面向对象(速过复习版)
开发语言·c++
MATLAB代码顾问11 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法