Computer >> Máy Tính >  >> Lập trình >> Python

Trình kiểm tra mật khẩu mạnh bằng Python

Giả sử chúng ta có một chuỗi, mật khẩu. Chúng tôi phải tìm ra những thay đổi tối thiểu cần thiết để làm cho mật khẩu mạnh. Vì vậy, mật khẩu có một số tiêu chí sau -

  • Nó phải dài ít nhất 6 ký tự và dài nhiều nhất 20 ký tự
  • Nó phải chứa ít nhất một chữ thường, ít nhất một chữ hoa và ít nhất một ký tự số.
  • Nó không được chứa ba ký tự lặp lại liên tiếp như… aaa…,… PPP…,… 888….

Vì vậy, nếu đầu vào giống như "aa26bbb", vì vậy chúng ta cần ít nhất một thay đổi, vì không có chữ hoa và có ba chữ b liên tiếp, vì vậy chúng ta có thể thay thế b bất kỳ bằng một chữ hoa để làm cho nó vững chắc.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • set thiếuTypes:=3.
  • nếu nó có ít nhất một chữ cái thường, hãy giảm thiếu các loại đi 1
  • nếu nó có ít nhất một chữ cái viết hoa, hãy giảm thiếu các loại đi 1
  • nếu nó có ít nhất một số, hãy giảm thiếu các loại đi 1
  • thay đổi:=0, một:=0 và hai:=0, p:=2
  • while p
  • nếu s [p] giống với s [p - 1] và điều này cũng giống với s [p - 2], thì
    • chiều dài:=2
    • while p
    • length:=length + 1
    • p:=p + 1
  • thay đổi:=change + length / 3
  • nếu độ dài chia hết cho 3, thì hãy tăng một cho 1
  • ngược lại khi độ dài chia hết cho 3 thì tăng hai bằng 1
  • nếu không thì tăng p lên 1
  • nếu kích thước của s <6, thì trả về giá trị tối đa của loại_còn_ thiếu và kích thước là 6 của s
  • nếu không, khi kích thước của s <20, thì trả về giá trị max của missing_type và thay đổi
  • nếu không thì
    • xóa:=kích thước của s - 20
    • thay đổi:=thay đổi - số lần xóa tối thiểu và một lần
    • change:=change - (min of (max of delete - một và 0) và hai * 2) / 2
    • change:=change - (max of delete - một - 2 * hai và 0) / 2
  • trả về xóa + tối đa của loại_các_bạn và thay đổi
  • Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    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