返回

Python解决LeetCode 2299:Strong Password Checker II 的详细教程

后端

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