2299. 强密码检验器 II
LeetCode: 2299. 强密码检验器 II
简单 \color{#00AF9B}{简单} 简单
如果一个密码满足以下所有条件,我们称它是一个 强 密码:
- 它有至少
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:模拟 + 哈希表
为多个条件创建布尔变量,在遍历字符串的时候挨个去判断。
对于特殊字符 "!@#$%^&*()-+"
,我们可以将其拆分,全部写入一个 if 语句中,也可以将这些字符全部存入哈希表中。在遍历字符串时,去哈希表中查找字符。
#include <string>
#include <cctype>
#include <unordered_set>
using namespace std;
class Solution
{
public:
bool strongPasswordCheckerII(const string &password)
{
if (password.size() < 8)
return false;
char pre = 0;
bool lower = false, upper = false, digit = false, special = false;
const unordered_set specials{
'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '+'};