Python中的强大密码检查器

假设我们有一个字符串,密码。我们必须找出使密码更安全所需的最小更改。因此密码具有以下一些条件-

  • 长度至少为6个字符,最长为20个字符

  • 它必须包含至少一个小写字母,至少一个大写字母和至少一个数字字符。

  • 它不能连续包含三个重复字符,例如…aaa…,…PPP…,…888…。

因此,如果输入像“ aa26bbb”,那么我们至少需要进行一次更改,因为没有大写字母,并且连续存在三个b,因此我们可以用一个大写字母替换任何b使其变强。

为了解决这个问题,我们将遵循以下步骤-

  • 设置missingTypes:= 3。

  • 如果它至少有一个小写字母,则将missingTypes减少1

  • 如果它至少有一个大写字母,则将missingTypes减少1

  • 如果它至少有一个数字,则将missingTypes减少1

  • 更改:= 0,一个:= 0和两个:= 0,p:= 2

  • 当p <s的大小时

    • 长度:= 2

    • 当p <s的大小且s [p] = s [p – 1]时,

    • 更改:=更改+长度/ 3

    • 如果长度被3整除,则增加1

    • 否则,当长度可被3整除时,再将其增加1

    • 长度:=长度+ 1

    • p:= p + 1

    • 如果s [p]与s [p – 1]相同,并且也与s [p-2]相同,则

    • 否则将p增加1

    • 如果s的大小<6,则返回missing_type的最大值和6 – s的大小

    • 否则,当s的大小<20时,则返回missing_type的最大值并进行更改

    • 除此以外

      • 删除:= s的大小– 20

      • 更改:=更改–最小删除和一个

      • 更改:=更改–(最小(删除的最大值–一个和0)和两个* 2)/ 2

      • 更改:=更改–(最大删除次数–一– 2 *二和0)/ 2

    • 返回delete + missing_type的最大值并进行更改

    让我们看下面的实现以更好地理解-

    示例

    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