LeetCode2299.强密码检验器II-创新互联

【LetMeFly】2299.强密码检验器 II

力扣题目链接:https://leetcode.cn/problems/strong-password-checker-ii/

成都创新互联公司是一家以成都网站建设公司、网页设计、品牌设计、软件运维、seo优化排名、小程序App开发等移动开发为一体互联网公司。已累计为成都纱窗等众行业中小客户提供优质的互联网建站和软件开发服务。

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

  • 它有至少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包含字母,数字和 "!@#$%^&*()-+"这些特殊字符。
方法一:模拟

对于“是否有两个连续的相同字符”,我们可以开辟一个变量来记录上一个字符是什么,如果这个字符和上一个字符相同则直接返回false

对于“是否含有大写字母”、“是否含有小写字母”、“是否含有数字”,则很容易判断

如果既不是大小写字母,又不是数字,则就是特殊字符(因为题目中说了只包含这些字符,所以在不满足前三种的情况下就不用再特判是否为特殊字符了)

  • 时间复杂度 O ( l e n ( p a s s w o r d ) ) O(len(password)) O(len(password))
  • 空间复杂度 O ( 1 ) O(1) O(1)
AC代码 C++
class Solution {public:
    bool strongPasswordCheckerII(string& password) {if (password.size()< 8)
            return false;
        char lastChar = 0;
        bool hasLower = false, hasUpper = false, hasDigit = false, hasSpecial= false;
        for (char c : password) {if (c == lastChar)
                return false;
            lastChar = c;
            if (c >= '0' && c<= '9')
                hasDigit = true;
            else if (c >= 'a' && c<= 'z')
                hasLower = true;
            else if (c >= 'A' && c<= 'Z')
                hasUpper = true;
            else
                hasSpecial= true;
        }
        return hasLower && hasUpper && hasDigit && hasSpecial;
    }
};
Python
# 参考了官方题解的简洁的判断大小写数字的方法,其他全部是自己的思路,竟然和官方题解的命名都一样。
# 不同的是特殊字符的判断方法,题目中说过了只包含字母数字和特殊字符,因此不少字母数字就是特殊字符
# 不同的还有是否两个连续字符相同的判断方法,我个人觉得我的更简洁一些
class Solution:
    def strongPasswordCheckerII(self, password: str) ->bool:
        if len(password)< 8:
            return False
        lastChar = ''
        hasLower, hasUpper, hasDigit, hasSpecial= False, False, False, False
        for c in password:
            if c == lastChar:
                return False
            lastChar = c
            if c.islower():
                hasLower = True
            elif c.isupper():
                hasUpper = True
            elif c.isdigit():
                hasDigit = True
            else:
                hasSpecial= True
        return hasLower and hasUpper and hasDigit and hasSpecial

同步发文于,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/128738747

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:LeetCode2299.强密码检验器II-创新互联
转载注明:http://myzitong.com/article/dgeoji.html