25.强密码检验器 II

这是第 25 篇算法,力扣链接

如果一个密码满足以下所有条件,我们称它是一个  密码:

  • 它有至少 8 个字符。
  • 至少包含 一个小写英文 字母。
  • 至少包含 一个大写英文 字母。
  • 至少包含 一个数字 。
  • 至少包含 一个特殊字符 。特殊字符为:"!@#$%^&*()-+" 中的一个。
  • 它  包含 2 个连续相同的字符(比方说 "aab" 不符合该条件,但是 "aba" 符合该条件)。

给你一个字符串 password ,如果它是一个  密码,返回 true,否则返回 false 。

示例 1:

输入:password = "IloveLe3tcode!"
输出:true
解释:密码满足所有的要求,所以我们返回 true 。

 这个算法题还挺有用的,普通的密码校验码也是这套逻辑。

其实这道题对比的是 ASCII 码,它们的字符分别是a~z,A~Z,0~9,!@#$%^&*()-+,并且不让连续。

思路是设置四个 flag,并且遍历一遍,没有异常就正确。

import (
	"strings"
	"unicode"
)

func strongPasswordCheckerII(password string) bool {
	if len(password) < 8 {
		return false
	}
	checka, checkA, check1, check := false, false, false, false
	for i, str := range password {
		if i != 0 && password[i] == password[i-1] {
			return false
		}
		if unicode.IsLower(str) {
			checka = true
		} else if unicode.IsUpper(str) {
			checkA = true
		} else if unicode.IsDigit(str) {
			check1 = true
		} else if strings.ContainsRune("!@#$%^&*()-+", str) {
			check = true
		}
	}
	return checka && checkA && check1 && check
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值