मान लीजिए कि हमें एक बाइनरी स्ट्रिंग input_str दिया गया है जिसमें 0s और 1s हैं। हमारा काम दिए गए स्ट्रिंग में 1s को स्वैप करके 0s और 1 को समूहित करना है। हमें न्यूनतम संख्या में स्वैप ऑपरेशन करने होंगे, और हमें वह मान वापस करना होगा। एक बात का ध्यान रखें, हम केवल आसन्न मूल्यों को स्वैप कर सकते हैं।
तो, अगर इनपुट input_str =10110101 जैसा है, तो आउटपुट 4
. होगास्वैप निम्नलिखित की तरह होगा -
10110101->01110101->01111001->01111010->01111100
स्वैप की कुल संख्या:4.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक :=एक नई सूची जिसमें input_str में स्थितियां हैं जहां 1s स्थित हैं
- मध्य :=का न्यूनतम मान (एक / 2 का आकार)
- res :=0
- मैं के लिए 0 से एक के आकार की सीमा में, करते हैं
- res :=res + |one[mid] - one[i]| - |मध्य - मैं|
- यदि रेस <0, तो
- वापसी 0
- अन्यथा,
- रिटर्न रेस
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(input_string): one = [i for i in range(len(input_string)) if input_string[i] == "1"] mid = len(one) // 2 res = 0 for i in range(len(one)): res += abs(one[mid] - one[i]) - abs(mid - i) return 0 if res < 0 else res print(solve('10110101'))
इनपुट
'10110101'
आउटपुट
4