leetcode2299_go_强密码检验器II

题目

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

它有至少 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)

leetcode2299_go_强密码检验器II

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 条评论) “”
   
验证码:

相关文章

推荐文章