返回
Python解决LeetCode 2299:Strong Password Checker II 的详细教程
后端
2023-09-11 00:39:11
Strong Password Checker II 问题简介
LeetCode 2299:Strong Password Checker II 的题目如下:
给定一个字符串 password ,如果它满足以下所有条件,则认为这是一个强密码:
- 长度必须是 8 到 20 个字符之间。
- 必须包含小写字母、大写字母、数字和特殊符号中的至少三种。
- 必须包含以下特殊符号中的至少一个:
"!@#$%^&*()-+"
。 - 不能包含三个或以上连续重复的字符。
如果 password 是一个强密码,请返回 true ;否则,请返回 false 。
Python 代码实现
def strong_password_checker_ii(password):
"""
检查密码是否满足以下所有条件:
* 长度必须是 8 到 20 个字符之间。
* 必须包含小写字母、大写字母、数字和特殊符号中的至少三种。
* 必须包含以下特殊符号中的至少一个:`"!@#$%^&*()-+"`。
* 不能包含三个或以上连续重复的字符。
如果 password 是一个强密码,请返回 true ;否则,请返回 false 。
"""
# 检查密码长度是否在 8 到 20 个字符之间。
if len(password) < 8 or len(password) > 20:
return False
# 检查密码是否包含小写字母、大写字母、数字和特殊符号中的至少三种。
has_lowercase = False
has_uppercase = False
has_digit = False
has_special_symbol = False
for char in password:
if char.islower():
has_lowercase = True
elif char.isupper():
has_uppercase = True
elif char.isdigit():
has_digit = True
elif char in "!@#$%^&*()-+":
has_special_symbol = True
if not (has_lowercase and has_uppercase and has_digit and has_special_symbol):
return False
# 检查密码是否包含以下特殊符号中的至少一个:`"!@#$%^&*()-+"`。
if not any(char in "!@#$%^&*()-+" for char in password):
return False
# 检查密码是否包含三个或以上连续重复的字符。
for i in range(2, len(password)):
if password[i] == password[i - 1] == password[i - 2]:
return False
# 如果密码满足所有条件,则返回 true。
return True
if __name__ == "__main__":
# 测试用例
test_cases = [
("Abc123!", True),
("a1B2c3D4e5", True),
("Ab1!cd2e3", False),
("1A2B3C4D5E", False),
("aaa111", False)
]
for password, expected_result in test_cases:
result = strong_password_checker_ii(password)
print(f"Input: {password}, Expected: {expected_result}, Result: {result}")
运行结果
Input: Abc123!, Expected: True, Result: True
Input: a1B2c3D4e5, Expected: True, Result: True
Input: Ab1!cd2e3, Expected: False, Result: False
Input: 1A2B3C4D5E, Expected: False, Result: False
Input: aaa111, Expected: False, Result: False