मान लीजिए कि हमारे पास एक लोअरकेस स्ट्रिंग है जिसकी लंबाई सम है। हमें उन वर्णों की न्यूनतम संख्या ज्ञात करनी है जिन्हें अद्यतन करने की आवश्यकता है ताकि निम्नलिखित तीन शर्तों में से एक सभी i के लिए संतुष्ट हो, जहां 0 i
- s[i]> s[j]
- s[i]
- s[i] ==s[j]
इसलिए, यदि इनपुट s ="pppxxp" जैसा है, तो आउटपुट 1 होगा क्योंकि यदि हम अंतिम "p" को "x" में बदलते हैं, तो यह s[i]
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- n :=आकार का
- बाएं:=एक शब्दकोश जिसमें s के बाएं आधे भाग से प्रत्येक वर्ण की आवृत्तियां होती हैं
- दाएं:=एक ऐसा शब्दकोष जिसमें s के दाहिने आधे भाग से प्रत्येक वर्ण की बारंबारता हो
- उत्तर:=n
- लोअरकेस अंग्रेज़ी अक्षरों में प्रत्येक वर्ण पिवट के लिए, करें
- Ans :=न्यूनतम उत्तर और (n - बाएँ[पिवट] - दाएँ [पिवट])
- अच्छा :=इसमें मौजूद सभी तत्वों का योग (बाएं [c] प्रत्येक c के लिए बाईं ओर यदि c <=पिवट )
- अच्छा:=अच्छा + दाईं ओर मौजूद सभी तत्वों का योग[c] दाईं ओर प्रत्येक c के लिए यदि c> पिवट
- उत्तर :=न्यूनतम उत्तर और (n - अच्छा)
- अच्छा:=बाईं ओर मौजूद सभी तत्वों का योग[c] बाईं ओर प्रत्येक c के लिए यदि c> पिवट
- अच्छा:=अच्छा + दाईं ओर मौजूद सभी तत्वों का योग[c] प्रत्येक c के लिए दाईं ओर अगर c <=पिवट
- उत्तर :=न्यूनतम उत्तर और (n - अच्छा)
- वापसी उत्तर
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from collections import Counter from string import ascii_lowercase def solve(s): n = len(s) left = Counter(s[: n >> 1]) right = Counter(s[n >> 1 :]) ans = n for pivot in ascii_lowercase: ans = min(ans, n - left[pivot] - right[pivot]) good = sum(left[c] for c in left if c <= pivot) good += sum(right[c] for c in right if c > pivot) ans = min(ans, n - good) good = sum(left[c] for c in left if c > pivot) good += sum(right[c] for c in right if c <= pivot) ans = min(ans, n - good) return ans s = "pppxxp" print(solve(s))
इनपुट
"pppxxp"
आउटपुट
1