当前位置: 首页 > 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.mrgr.cn/news/31600.html

相关文章:

  • Linux 文件服务器-ftp匿名用户详解
  • 2024最新最全:超详细Nmap使用技巧(非常详细)零基础入门到精通,收藏这一篇就够了
  • Neo4j技术指南
  • nginx架构篇(三)
  • 火语言RPA流程组件介绍--获取关联元素
  • 搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(四)-搜索
  • 数字化转型的理论框架对比:从多维视角指导企业成功变革对比DPBOKIT4ITCOBITTOGAF
  • Oracle+11g+笔记(5)-Oracle数据库管理操作
  • 【大模型教程】基于 InternLM 和 LangChain 搭建知识库助手
  • 网络资源模板--Android Studio 图书借阅App
  • 设计模式-策略模式
  • 【大屏方案】可视化综合展示系统解决方案(Word原件2024)
  • [Web安全 网络安全]-XSS跨站脚本攻击
  • MySQL中的函数简单总结,以及TCL语句的简单讲解
  • 手机切换IP简单方法:掌握技巧,轻松实现IP变换‌
  • 浅谈计算机视觉的学习路径1
  • 2024最新最全:Wireshark抓包详解(非常详细)零基础入门到精通,收藏这篇就够了
  • 2024 “华为杯” 中国研究生数学建模竞赛(A题)|风电场有功功率优化分配|数学建模完整代码+建模过程全解全析
  • 哪个牌子的麦克风好用?无线麦克风避坑指南:五大常见问题
  • 详解npm源及其使用方法