Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Kiểm tra mật khẩu mạnh trong Python

Giả sử chúng ta có một chuỗi mật khẩu. Chúng ta phải tìm số lần thay đổi tối thiểu để làm cho mật khẩu trở nên mạnh. Tiêu chí mật khẩu mạnh:

  • Độ dài từ 6 đến 20 ký tự
  • Chứa ít nhất 1 chữ thường, 1 chữ hoa, 1 chữ số
  • Không chứa 3 ký tự giống nhau liên tiếp (vd: aaa, PPP, 888)

Ví dụ: "aa26bbb" cần ít nhất 1 thay đổi (thiếu chữ hoa và có 3 b liên tiếp).

Các bước giải quyết:

  • missingTypes := 3. Giảm 1 cho mỗi loại ký tự có mặt (thường, hoa, số)
  • Duyệt chuỗi tìm các chuỗi ký tự lặp lại, tính số lần thay đổi cần thiết (change)
  • Phân loại độ dài chuỗi lặp theo modulo 3 (one, two)
  • Xử lý 3 trường hợp độ dài: < 6, 6-20, > 20
  • Trả về số thay đổi tối thiểu

Ví dụ

class Solution(object):
    def strongPasswordChecker(self, s):
        missing_type = 3
        if any('a' <= c <= 'z' for c in s): missing_type -= 1
        if any('A' <= c <= 'Z' for c in s): missing_type -= 1
        if any(c.isdigit() for c in s): missing_type -= 1
        change = 0
        one = two = 0
        p = 2
        while p < len(s):
            if s[p] == s[p-1] == s[p-2]:
                length = 2
                while p < len(s) and s[p] == s[p-1]:
                    length += 1
                    p += 1
                change += length // 3
                if length % 3 == 0: one += 1
                elif length % 3 == 1: two += 1
            else:
                p += 1
        if len(s) < 6:
            return max(missing_type, 6 - len(s))
        elif len(s) <= 20:
            return max(missing_type, change)
        else:
            delete = len(s) - 20
            change -= min(delete, one)
            change -= min(max(delete - one, 0), two * 2) // 2
            change -= max(delete - one - 2 * two, 0) // 3
            return delete + max(missing_type, change)

ob = Solution()
print(ob.strongPasswordChecker('aa26bbb'))

Đầu vào

"aa26bbb"

Đầu ra

1