Python 中的強密碼檢查器
假設我們有一個字串 password。我們需要找出使密碼變強的最小修改次數。因此,密碼有一些以下標準:
- 它必須至少 6 個字元長,最多 20 個字元長。
- 它必須至少包含一個小寫字母、至少一個大寫字母和至少一個數字字元。
- 它不能包含三個連續的重複字元,例如……aaa……、……PPP……、……888……。
因此,如果輸入類似於“aa26bbb”,那麼我們需要至少一次更改,因為沒有大寫字母,並且連續有三個 b,因此我們可以用一個大寫字母替換任何一個 b 以使其變強。
為了解決這個問題,我們將遵循以下步驟:
- 設定 missingTypes := 3。
- 如果它至少包含一個小寫字母,則將 missingTypes 減 1。
- 如果它至少包含一個大寫字母,則將 missingTypes 減 1。
- 如果它至少包含一個數字,則將 missingTypes 減 1。
- change := 0,one := 0 和 two := 0,p := 2。
- 當 p < s 的大小,執行以下操作:
- 如果 s[p] 與 s[p – 1] 相同,並且這也與 s[p - 2] 相同,則
- length := 2。
- 當 p < s 的大小且 s[p] = s[p – 1],執行以下操作:
- length := length + 1。
- p := p + 1。
- change := change + length / 3。
- 如果 length 可以被 3 整除,則將 one 增加 1。
- 否則,當 length 可以被 3 整除時,則將 two 增加 1。
- 否則,將 p 增加 1。
- 如果 s[p] 與 s[p – 1] 相同,並且這也與 s[p - 2] 相同,則
- 如果 s 的大小 < 6,則返回 missing_type 和 6 – s 的大小中的最大值。
- 否則,當 s 的大小 < 20 時,則返回 missing_type 和 change 中的最大值。
- 否則
- delete := s 的大小 – 20。
- change := change – delete 和 one 中的最小值。
- change := change – (delete – one 和 0 中的最大值與 two * 2 中的最小值)/2。
- change := change – (delete – one – 2 * two 和 0 中的最大值)/2。
- 返回 delete + missing_type 和 change 中的最大值。
讓我們看看下面的實現以更好地理解:
示例
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'))輸入
“aa26bbb”
輸出
1
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP