मान लीजिए हमारे पास एक स्ट्रिंग, पासवर्ड है। हमें पासवर्ड को मजबूत बनाने के लिए आवश्यक न्यूनतम परिवर्तनों का पता लगाना होगा। तो पासवर्ड के कुछ निम्नलिखित मापदंड हैं -
- यह कम से कम 6 वर्ण लंबा और अधिकतम 20-वर्ण लंबा होना चाहिए
- इसमें कम से कम एक छोटा अक्षर, कम से कम एक बड़ा अक्षर और कम से कम एक अंकीय वर्ण होना चाहिए।
- इसमें एक पंक्ति में तीन दोहराए जाने वाले वर्ण नहीं होने चाहिए जैसे …आआ…,…पीपीपी…,…888….
इसलिए यदि इनपुट "aa26bbb" जैसा है, तो हमें कम से कम एक बदलाव की आवश्यकता है, क्योंकि कोई अपरकेस अक्षर नहीं है, और एक पंक्ति में तीन b हैं, इसलिए हम किसी भी b को एक अपरकेस अक्षर से बदल सकते हैं ताकि इसे मजबूत बनाया जा सके।पी>
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- गायब प्रकार सेट करें:=3.
- यदि इसमें कम से कम एक लोअरकेस अक्षर है, तो लापता प्रकारों को 1 से कम करें
- यदि इसमें कम से कम एक अपरकेस अक्षर है, तो लापता प्रकारों को 1 से कम करें
- यदि इसमें कम से कम एक संख्या है, तो लापता प्रकारों को 1 से कम करें
- बदलें:=0, एक:=0 और दो:=0, पी:=2
- जबकि p
- यदि s[p], s[p – 1] के समान है और यह भी s[p - 2] के समान है, तो
- लंबाई:=2
- जबकि p
- लंबाई:=लंबाई + 1
- p :=p + 1
- बदलें:=बदलाव + लंबाई / 3
- यदि लंबाई 3 से विभाज्य है, तो एक को 1 से बढ़ा दें
- अन्यथा जब लंबाई 3 से विभाज्य हो, तो दो को 1 से बढ़ा दें
- यदि s[p], s[p – 1] के समान है और यह भी s[p - 2] के समान है, तो
- हटाएं :=s – 20 का आकार
- बदलें:=बदलें - कम से कम हटाएं और एक
- बदलें :=परिवर्तन - (न्यूनतम (अधिकतम हटाएं - एक और 0) और दो * 2)/2
- बदलें:=बदलें - (अधिकतम हटाएं - एक - 2 * दो और 0)/2
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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