如果一个密码满足以下所有条件,我们称它是一个 强 密码:
它有至少 8 个字符。
至少包含 一个小写英文 字母。
至少包含 一个大写英文 字母。
至少包含 一个数字 。
至少包含 一个特殊字符 。特殊字符为:"!@#$%^&*()-+" 中的一个。
它 不 包含 2 个连续相同的字符(比方说 "aab" 不符合该条件,但是 "aba" 符合该条件)。
给你一个字符串 password ,如果它是一个 强 密码,返回 true,否则返回 false 。
示例 1:输入:password = "IloveLe3tcode!" 输出:true
解释:密码满足所有的要求,所以我们返回 true 。
示例 2:输入:password = "Me+You--IsMyDream" 输出:false
解释:密码不包含数字,且包含 2 个连续相同的字符。所以我们返回 false 。
示例 3:输入:password = "1aB!" 输出:false
解释:密码不符合长度要求。所以我们返回 false 。
提示:1 <= password.length <= 100
password 包含字母,数字和 "!@#$%^&*()-+" 这些特殊字符。
1、遍历;时间复杂度O(n),空间复杂度O(1)
func strongPasswordCheckerII(password string) bool {
if len(password) < 8 {
return false
}
s := "!@#$%^&*()-+"
mm := make(map[byte]bool)
for i := 0; i < len(s); i++ {
mm[s[i]] = true
}
m := make(map[int]int)
arr := []byte(password)
for k, v := range arr {
if k >= 1 {
if v == arr[k-1] {
return false
}
}
if '0' <= v && v <= '9' {
m[1] = 1
}
if 'a' <= v && v <= 'z' {
m[2] = 1
}
if 'A' <= v && v <= 'Z' {
m[3] = 1
}
if mm[v] == true {
m[4] = 1
}
}
return len(m) == 4
}2、内置函数;时间复杂度O(n),空间复杂度O(1)
func strongPasswordCheckerII(password string) bool {
if len(password) < 8 {
return false
}
m := make(map[int]int)
for i := 0; i < len(password); i++ {
if i >= 1 {
if password[i] == password[i-1] {
return false
}
}
v := rune(password[i])
switch {
case unicode.IsLower(v):
m[1] = 1
case unicode.IsUpper(v):
m[2] = 1
case unicode.IsDigit(v):
m[3] = 1
default:
m[4] = 1
}
}
return len(m) == 4
}Easy题目,直接遍历判断即可
| 留言与评论(共有 0 条评论) “” |