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

相关推荐
知乎的哥廷根数学学派13 分钟前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
txinyu的博客29 分钟前
解析业务层的key冲突问题
开发语言·c++·分布式
666HZ6661 小时前
数据结构2.0 线性表
c语言·数据结构·算法
SmartRadio2 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
西伯利亚狼_J20202 小时前
260109introduceEN
职场和发展
实心儿儿2 小时前
Linux —— 基础开发工具5
linux·运维·算法
charlie1145141913 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
清木铎4 小时前
leetcode_day4_筑基期_《绝境求生》
算法
清木铎4 小时前
leetcode_day10_筑基期_《绝境求生》
算法
j_jiajia5 小时前
(一)人工智能算法之监督学习——KNN
人工智能·学习·算法