Python | Leetcode Python题解之第420题强密码检验器

news2024/11/13 20:45:30

题目:

题解:

class Solution:
    def strongPasswordChecker(self, password: str) -> int:
        n = len(password)
        has_lower = has_upper = has_digit = False
        for ch in password:
            if ch.islower():
                has_lower = True
            elif ch.isupper():
                has_upper = True
            elif ch.isdigit():
                has_digit = True
        
        categories = has_lower + has_upper + has_digit

        if n < 6:
            return max(6 - n, 3 - categories)
        elif n <= 20:
            replace = cnt = 0
            cur = "#"

            for ch in password:
                if ch == cur:
                    cnt += 1
                else:
                    replace += cnt // 3
                    cnt = 1
                    cur = ch
            
            replace += cnt // 3
            return max(replace, 3 - categories)
        else:
            # 替换次数和删除次数
            replace, remove = 0, n - 20
            # k mod 3 = 1 的组数,即删除 2 个字符可以减少 1 次替换操作
            rm2 = cnt = 0
            cur = "#"

            for ch in password:
                if ch == cur:
                    cnt += 1
                else:
                    if remove > 0 and cnt >= 3:
                        if cnt % 3 == 0:
                            # 如果是 k % 3 = 0 的组,那么优先删除 1 个字符,减少 1 次替换操作
                            remove -= 1
                            replace -= 1
                        elif cnt % 3 == 1:
                            # 如果是 k % 3 = 1 的组,那么存下来备用
                            rm2 += 1
                        # k % 3 = 2 的组无需显式考虑
                    replace += cnt // 3
                    cnt = 1
                    cur = ch
            
            if remove > 0 and cnt >= 3:
                if cnt % 3 == 0:
                    remove -= 1
                    replace -= 1
                elif cnt % 3 == 1:
                    rm2 += 1
            
            replace += cnt // 3

            # 使用 k % 3 = 1 的组的数量,由剩余的替换次数、组数和剩余的删除次数共同决定
            use2 = min(replace, rm2, remove // 2)
            replace -= use2
            remove -= use2 * 2
            # 由于每有一次替换次数就一定有 3 个连续相同的字符(k / 3 决定),因此这里可以直接计算出使用 k % 3 = 2 的组的数量
            use3 = min(replace, remove // 3)
            replace -= use3
            remove -= use3 * 3
            return (n - 20) + max(replace, 3 - categories)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2154069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Datawhale X 南瓜书 task02学习笔记

算法原理引入 样本点通常应该在模型的2侧&#xff0c;原因&#xff1a;在实际中&#xff0c;因为某种不可控的因素&#xff0c;测出来的样本点肯定是有误差的。如果样本数据点都在模型上&#xff0c;则说明在建立模型时&#xff0c;把误差也考虑进去了&#xff0c;这就是我们说…

Linux使用常见问题指南

普通用户sudo权限问题 我在普通用户Sun下,编写了一个.cc文件,然后用sudo权限安装gcc/g去运行该文件,却提示我如下: 原因 当前的用户没有加入到sudo的配置文件里 #切换到root用户 su #编辑配置文件 vim /etc/sudoers #增加配置, 在打开的配置文件中&#xff0c;找到root ALL(A…

波分技术基础 -- FEC

信号在传输过程中&#xff0c;不可避免的会出现劣化、误码&#xff0c;FEC (Forward error correction) 技术确保通信系统在噪声和其他损伤的影响下&#xff0c;依然能够实现无错误传输。 应用场景&#xff1a;长途密集波分系统&#xff08;DWDM&#xff09;实现方式&#xff…

AI赋能篇:万物皆可播,AI视频直播新趋势,轻松打造24h不间断开播!

AI赋能篇&#xff1a;万物皆可播&#xff0c;AI视频直播新趋势&#xff0c;轻松打造24h不间断开播&#xff01; 在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度渗透到我们生活的每一个角落&#xff0c;其中&#xff0c;AI视频直播作为…

基于vue框架的储蓄卡业务管理系统的设计与实现28g6t(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;客户,银行账户,存款记录,取款记录,转账记录,经理,柜员,贷款产品,贷款申请,放款信息,还款信息,离职申请,通知公告,用户反馈,开户申请 开题报告内容 基于Vue框架的储蓄卡业务管理系统设计与实现开题报告 一、项目背景与意义 随着金融科…

智慧园区:解析集成运维的未来之路

随着科技的进步和社会的发展&#xff0c;智慧园区已经成为了城市建设的重要方向。作为一个集信息技术、通信技术、能源技术等多种技术于一体的综合性项目&#xff0c;智慧园区的建设具有极高的科技含量和产业复杂度。而在智慧园区的运维管理中&#xff0c;更是需要集成化的处理…

unity3d入门教程八-飞机大战

unity3d入门教程八-飞机大战 19.2竖屏设置19.3主控脚本19.4制作子弹19.5制作飞机19.6制作怪物19.7击中目标19.8随机生成怪物19.9预制体怪物随机更换头像19.10怪物相关优化19.11游戏背景19.12游戏最终优化一、 HP显示二、怪物预制体三、分值显示四、背景音乐 19.2竖屏设置 切换到…

信息安全工程师(8)网络新安全目标与功能

前言 网络新安全目标与功能在当前的互联网环境中显得尤为重要&#xff0c;它们不仅反映了网络安全领域的最新发展趋势&#xff0c;也体现了对网络信息系统保护的不断加强。 一、网络新安全目标 全面防护与动态应对&#xff1a; 目标&#xff1a;建立多层次、全方位的网络安全防…

安装黑群晖系统,并使用NAS公网助手访问教程(好文)

由于正版群晖系统的价格不菲&#xff0c;对于预算有限的用户来说&#xff0c;安装黑群晖系统成为了一个不错的选择&#xff08;如果您预算充足&#xff0c;建议选择白群晖&#xff09;。如您对宅系科技比较感兴趣&#xff0c;欢迎查看本文&#xff0c;将详细介绍如何安装黑群晖…

PAT甲级-1083 List Grades

题目 题目大意 学生有姓名&#xff0c;编号和分数&#xff0c;给定分数区间&#xff0c;输出在这个区间内的人名和编号。输出顺序按照分数从高到低&#xff0c;没有重复的分数。 思路 非常简单的结构体排序题&#xff0c;定义一个结构体&#xff0c;按照题目条件sort就可以了…

2--SpringBoot项目中员工管理、分类管理 详解(一)

目录 员工管理 新增员工 需求分析和设计 代码开发 实体类 Controller层 Service层接口 Service层实现类 Mapper层 功能测试 通过接口文档测试 代码完善 问题一 解决 问题二 解决 员工分页查询 需求分析和设计 代码开发 设计DTO类 封装PageResult Controlle…

微服务架构---Ribbon\Feign

Ribbon(负载均衡) Ribbon概述 在 SpringCloud 中&#xff0c; Nacos⼀般配合Ribbon进行使用&#xff0c;Ribbon提供了客户端负载均衡的功能&#xff0c;Ribbon利用从Nacos中读取到的服务信息&#xff0c;在调用服务节点提供的服务时&#xff0c;会合理的进行负载。 Ribbon作…

Arthas vmoption(查看和修改 JVM里诊断相关的option)

文章目录 二、命令列表2.1 jvm相关命令2.1.6 vmoption&#xff08;查看和修改 JVM里诊断相关的option&#xff09;举例1&#xff1a;vmoption 查看所有的选项举例2&#xff1a;vmoption MinHeapFreeRatio 查看指定的选项 二、命令列表 2.1 jvm相关命令 2.1.6 vmoption&#x…

精选写作技巧!分享4款ai写毕业论文可以写出公式表格的软件

在撰写毕业论文时&#xff0c;AI写作工具可以极大地提高效率和质量。以下是四款值得推荐的AI软件&#xff0c;它们不仅能够帮助生成高质量的论文初稿&#xff0c;还能处理公式和表格等复杂内容。 传送门&#xff1a;https://www.aipaperpass.com?piclLGw 千笔-AIPassPaper是一…

基于SpringBoot+Vue的私人牙科诊所管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

大模型学习记录之Agent部署

首先&#xff0c;需要明确大模型的概念&#xff0c;通过百度的文心一言的结果&#xff0c;我们得到如下概念&#xff1a; 大模型的特点 大模型&#xff08;Large Models&#xff09; 在人工智能和机器学习领域&#xff0c;特别是深度学习领域&#xff0c;指的是那些具有大量参…

SAP B1 Web Client MS Teams App集成连载四

过程/Procedure&#xff1a; 1.通过点击选项卡旁边的下拉箭头&#xff0c;可以重新配置、重命名和移除现有选项卡。 You can reconfigure, rename and remove an existing tab by clicking the drop down arrow alongside the tab. 要重新配置选项卡&#xff0c;请选择“设置”…

网络安全:腾讯云智、绿盟、美团、联想的面经

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

【用Java学习数据结构系列】用堆实现优先级队列

看到这句话的时候证明&#xff1a;此刻你我都在努力 加油陌生人 个人主页&#xff1a;Gu Gu Study 专栏&#xff1a;用Java学习数据结构系列 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff…

如何在Java中实现用户列表的下载功能

在现代的Web应用中&#xff0c;用户管理是一个常见的需求。用户可能需要查看和下载他们的个人信息或者用户列表。本文将介绍如何使用Java和Spring框架实现用户列表的下载功能&#xff0c;具体采用Excel格式。 一、项目准备 首先&#xff0c;确保你的项目中已经引入了Spring B…