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

HJ20 密码验证合格程序【牛客网】

文章目录

  • 零、原题链接
  • 一、题目描述
  • 二、测试用例
  • 三、解题思路
  • 四、参考代码

零、原题链接


HJ20 密码验证合格程序

一、题目描述

在这里插入图片描述

在这里插入图片描述

二、测试用例

在这里插入图片描述

三、解题思路

  1. 基本思路:
      对每个字符串验证是否满足那三个条件即可。
  2. 具体思路:
    • 密码长度必须不少于 8 位,则字符串长度要大于等于 8
    • 必须包含大写字母、小写字母、数字、特殊字符中的至少三种,则遍历字符串,统计类型的数量,然后判断是否不少于 3 种即可;
    • 不能分割出两个独立的、长度大于 2 的连续子串,使得这两个子串完全相同;
      • 遍历字符串,每次取连续的 3 个字符构成字符子串,按照 <字符子串,首地址> 的形式存放到 map 中;【如果存在长度大于 3 的独立字符子串相同,则一定存在长度为 3 的独立子串相同,所以只要判断是否存在长度为 3 的字符子串即可】
      • 如果已经存在于 map 中,则判断首地址是否相差小于 2 ,小于 2 ,则两个字符子串不是独立的,合法;如果大于等于 2 ,则两个子串独立且相同,则非法;【即 ababa 可以存在子串 abaaba ,但是两个子串不是独立的】

四、参考代码

时间复杂度: O ( ∑ i = 1 n l i ) \Omicron(\sum\limits_{i=1}^nl_i) O(i=1nli)【其中 l i l_i li 是第 i 个字符串的长度,n 表示一共有 n 个字符串】
空间复杂度: O ( max ⁡ i = 1 n l i ) \Omicron(\max\limits_{i=1}^n l_i) O(i=1maxnli)

#include <cctype>
#include <iostream>
#include <unordered_map>
#include <unordered_set>
using namespace std;bool meet3(const string& str) {unordered_map<string, int> m_map;string temp;for (int i = 0; i < str.length() - 2; i++) {temp = str.substr(i, 3);if (m_map.count(temp) == 1) {if (m_map[temp] < i - 2)return false;} else {m_map.emplace(temp, i);}}return true;
}int main() {string str;while (getline(cin, str)) {if (str.length() < 8) {cout << "NG" << endl;continue;}int Alpha = 0, alpha = 0, digit = 0, special = 0;for (int i = 0; i < str.length(); i++) {if (isdigit(str[i]))digit = 1;else if ('A' <= str[i] && str[i] <= 'Z')Alpha = 1;else if ('a' <= str[i] && str[i] <= 'z')alpha = 1;elsespecial = 1;}if (Alpha + alpha + digit + special < 3) {cout << "NG" << endl;continue;}if (meet3(str))cout << "OK" << endl;elsecout << "NG" << endl;}
}
// 64 位输出请用 printf("%lld")
http://www.xdnf.cn/news/573229.html

相关文章:

  • 测试W5500的第4步_使用ioLibrary库创建UDP客户端和服务器端
  • 数据结构核心知识总结:从基础到应用
  • 6-码蹄集600题基础python篇
  • Mysql数据库相关命令及操作
  • 链表-两两交换链表中的节点
  • Mysql差异备份与恢复
  • Python图像处理全攻略:从基础到前沿技术深度剖析
  • 极大似然估计与机器学习
  • python查询elasticsearch 获取指定字段的值的list
  • 操作系统期末复习(一)
  • 淘宝扭蛋机小程序开发:开启电商娱乐新玩法
  • 工程项目交付质量低?如何构建标准化管理体系?
  • C++网络编程入门学习(四)-- GDB 调试 学习 笔记
  • 第9.1讲、Tiny Encoder Transformer:极简文本分类与注意力可视化实战
  • 计算机操作系统(十)调度的概念与层次,进程调度的时机与进程的调度方式
  • LVLM-AFAH论文精读
  • GitHub SSH Key 配置详细教程(适合初学者,Windows版)-学习记录4
  • CESM2.0 全流程解析:从环境搭建到多模块耦合模拟
  • 打开小程序提示请求失败(小程序页面空白)
  • Python实现蛋白质结构RMSD计算
  • RAG 挑战赛冠军方案解析:从数据解析到多路由器检索的工程实践,推荐阅读!
  • Android Framework开发环境搭建
  • 【Linux庖换现象丁解牛】—进程程序替换!
  • python训练营打卡第30天
  • C++--string类对象
  • 【ffmpeg】ffprobe基本用法
  • 想解决内容同质化难题?运营该从哪入手?
  • linux系统查看硬盘序列号
  • 129.在 Vue3 中使用 OpenLayers 实现点击获取重叠要素信息(支持多 Feature)
  • Spring Boot 登录实现:JWT 与 Session 全面对比与实战讲解