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

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

题目:

题解:

func strongPasswordChecker(password string) int {hasLower, hasUpper, hasDigit := 0, 0, 0for _, ch := range password {if unicode.IsLower(ch) {hasLower = 1} else if unicode.IsUpper(ch) {hasUpper = 1} else if unicode.IsDigit(ch) {hasDigit = 1}}categories := hasLower + hasUpper + hasDigitswitch n := len(password); {case n < 6:return max(6-n, 3-categories)case n <= 20:replace, cnt, cur := 0, 0, '#'for _, ch := range password {if ch == cur {cnt++} else {replace += cnt / 3cnt = 1cur = ch}}replace += cnt / 3return max(replace, 3-categories)default:// 替换次数和删除次数replace, remove := 0, n-20// k mod 3 = 1 的组数,即删除 2 个字符可以减少 1 次替换操作rm2, cnt, cur := 0, 0, '#'for _, ch := range password {if ch == cur {cnt++continue}if remove > 0 && cnt >= 3 {if cnt%3 == 0 {// 如果是 k % 3 = 0 的组,那么优先删除 1 个字符,减少 1 次替换操作remove--replace--} else if cnt%3 == 1 {// 如果是 k % 3 = 1 的组,那么存下来备用rm2++}// k % 3 = 2 的组无需显式考虑}replace += cnt / 3cnt = 1cur = ch}if remove > 0 && cnt >= 3 {if cnt%3 == 0 {remove--replace--} else if cnt%3 == 1 {rm2++}}replace += cnt / 3// 使用 k % 3 = 1 的组的数量,由剩余的替换次数、组数和剩余的删除次数共同决定use2 := min(min(replace, rm2), remove/2)replace -= use2remove -= use2 * 2// 由于每有一次替换次数就一定有 3 个连续相同的字符(k / 3 决定),因此这里可以直接计算出使用 k % 3 = 2 的组的数量use3 := min(replace, remove/3)replace -= use3remove -= use3 * 3return (n - 20) + max(replace, 3-categories)}
}func max(a, b int) int {if b > a {return b}return a
}func min(a, b int) int {if a > b {return b}return a
}
http://www.lryc.cn/news/443396.html

相关文章:

  • 面试金典题3
  • FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
  • Python使用总结之py-docx将word文件中的图片保存,并将内容返回
  • Radware 报告 Web DDoS 攻击活动
  • OpenCV运动分析和目标跟踪(2)累积操作函数accumulateSquare()的使用
  • PCIe进阶之TL:Common Packet Header Fields TLPs with Data Payloads Rules
  • Linux之实战命令01:xargs应用实例(三十五)
  • Redisson实现分布式锁(看门狗机制)
  • 记录一次显卡驱动安装
  • nginx的作用是什么
  • 【全网最全】2024年华为杯研赛B题成品论文获取入口(后续会更新)
  • 计算机网络(八) —— Udp协议
  • 【Linux篇】TCP/IP协议(笔记)
  • std::pair和std::tuple
  • Access denied for user ‘root‘@‘114.254.154.110‘ (using password: YES)
  • 深度学习03-神经网络01-什么是神经网络?
  • Redisson 分布式锁的使用详解
  • 计算机网络:物理层 --- 基本概念、编码与调制
  • 使用Maven创建一个Java项目并在repository中使用
  • 如何使用IIC外设(硬件IIC)
  • 使用 Vue 3、Vite 和 TypeScript 的环境变量配置
  • F28335 的串行外设接口(以下简称 SPI)
  • 科技引领未来生活——“光影漫游者”展览馆应用—轻空间
  • ego-planner开源代码之启动参数介绍分析
  • 828 华为云征文|华为 Flexus 云服务器打造 Laverna 在线笔记应用
  • 数据结构与算法-Trie树添加与搜索
  • AIGC专栏15——CogVideoX-Fun详解 支持图文生视频 拓展CogVideoX到256~1024任意分辨率生成
  • BFS 解决多源最短路问题
  • 论文笔记:交替单模态适应的多模态表征学习
  • 鸿蒙OS 线程间通信