ধরুন একটি স্ট্রিং পাসওয়ার্ড আছে। আমাদের পাসওয়ার্ডকে স্ট্রং করার জন্য ন্যূনতম পরিবর্তনের সংখ্যা বের করতে হবে। পাসওয়ার্ডের মানদণ্ডগুলো −
- ন্যূনতম ৬ অক্ষর এবং সর্বোচ্চ ২০ অক্ষর দীর্ঘ হতে হবে
- কমপক্ষে একটি লোয়ারকেস, একটি আপারকেস এবং একটি न्यूमেরিক ক্যারেক্টার থাকতে হবে
- লগাতার তিনটি একই ক্যারেক্টার থাকতে পারবে না (যেমন ...aaa..., ...PPP..., ...888...)
উদাহরণ: "aa26bbb" ইনপুটের জন্য কমপক্ষে ১টি পরিবর্তন দরকার, কারণ আপারকেস লেটার নেই এবং তিনটি 'b' একসাথে আছে। যেকোনো 'b'-কে আপারকেস লেটার দিয়ে রিপ্লেস করলে স্ট্রং হবে।
সমাধানের ধাপগুলো −
- missingTypes := 3 সেট করুন
- যদি কমপক্ষে একটি লোয়ারকেস থাকে তবে missingTypes ১ কমান
- যদি কমপক্ষে একটি আপারকেস থাকে তবে missingTypes ১ কমান
- যদি কমপক্ষে একটি নম্বর থাকে তবে missingTypes ১ কমান
- change := 0, one := 0, two := 0, p := 2
- while p < len(s) − যদি s[p] == s[p-1] == s[p-2] হয় তবে length কাউন্ট করুন, change += length//3, length%3 অনুযায়ী one বা two বাড়ান
- যদি len(s) < 6 তবে max(missingTypes, 6-len(s)) রিটার্ন করুন
- যদি len(s) <= 20 তবে max(missingTypes, change) রিটার্ন করুন
- অন্যথায় 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; delete + max(missingTypes, 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