这是第 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
}