【每日一题Day92】LC2299强密码检验器 II | 模拟 状态压缩

简介: 思路:首先判断密码长度是否大于等于8,若是则判断该密码是否包含至少一个数字、小写字母、大写字母以及特殊字符,并相邻字符不相同,若满足条件则返回true。

强密码检验器 II【LC2299】


A password is said to be strong if it satisfies all the following criteria:


  • It has at least 8 characters.
  • It contains at least one lowercase letter.
  • It contains at least one uppercase letter.
  • It contains at least one digit.
  • It contains at least one special character. The special characters are the characters in the following string: "!@#$%^&*()-+".
  • It does not contain 2 of the same character in adjacent positions (i.e., "aab" violates this condition, but "aba" does not).


Given a string password, return true if it is a strong password. Otherwise, return false.


  • 思路:首先判断密码长度是否大于等于8,若是则判断该密码是否包含至少一个数字、小写字母、大写字母以及特殊字符,并相邻字符不相同,若满足条件则返回true。


  • 实现:使用一个变量记录该密码是否包含数字、小写字母、大写字母以及特殊字符,若都包含则返回true。


class Solution {
    public boolean strongPasswordCheckerII(String password) {
        int n = password.length();
        if (n < 8){
            return false;
        }
        int flag = 0;
        for (int i = 0; i < password.length(); i++){
            char c = password.charAt(i);
            if (i > 0 && password.charAt(i - 1) == c){
                return false;
            }
            if ( c >= '0' && c <= '9'){
                flag |= 1 << 0;
            }else if ( c >= 'a' && c <= 'z'){
                flag |= 1 << 1;
            }else if ( c >= 'A' && c <= 'Z'){
                flag |= 1 << 2;
            }else{
                flag |= 1 << 3;
            }
        }
        return flag >= 15;
    }
}


。复杂度分析


  • 时间复杂度:O ( n )
  • 空间复杂度:O ( 1 )
目录
相关文章
|
7月前
【每日一题Day168】LC2427公因子的数目 | 模拟
【每日一题Day168】LC2427公因子的数目 | 模拟
46 1
|
7月前
【每日一题Day290】LC1281整数的各位积和之差 | 模拟
【每日一题Day290】LC1281整数的各位积和之差 | 模拟
48 0
|
7月前
【每日一题Day268】LC415字符串相加 | 模拟
【每日一题Day268】LC415字符串相加 | 模拟
55 0
|
7月前
【每日一题Day366】LC2103环和杆 | 状态压缩
【每日一题Day366】LC2103环和杆 | 状态压缩
54 0
|
7月前
|
算法
【每日一题Day297】LC2682找出转圈游戏输家 | 模拟+哈希表
【每日一题Day297】LC2682找出转圈游戏输家 | 模拟+哈希表
74 0
|
7月前
【每日一题Day119】LC1250检查好数组 | 数学
【每日一题Day119】LC1250检查好数组 | 数学
51 0
|
7月前
【每日一题Day258】LC2532过桥的时间 | 模拟 优先队列
【每日一题Day258】LC2532过桥的时间 | 模拟 优先队列
47 0
|
7月前
【每日一题Day114】LC1223 掷骰子模拟 | 记忆化搜索+dp
【每日一题Day114】LC1223 掷骰子模拟 | 记忆化搜索+dp
61 0
|
7月前
【每日一题Day326】LC1222可以攻击国王的皇后 | 哈希表+模拟
【每日一题Day326】LC1222可以攻击国王的皇后 | 哈希表+模拟
46 0
|
7月前
|
机器人
【每日一题Day174】LC1041困于环中的机器人 | 模拟 位运算
【每日一题Day174】LC1041困于环中的机器人 | 模拟 位运算
51 0