मान लीजिए हमारे पास एक बाइनरी स्ट्रिंग है। हम निम्न में से प्रत्येक संचालन किसी भी संख्या में लागू कर सकते हैं:
यदि संख्या में उपस्ट्रिंग "00" है, तो हम इसे "10" से बदल सकते हैं।
यदि संख्या में उपस्ट्रिंग "10" है, तो हम इसे "01" से बदल सकते हैं।
तब हमें किसी भी संख्या में संचालन के बाद प्राप्त होने वाली अधिकतम बाइनरी (इसके संख्यात्मक मान के आधार पर) स्ट्रिंग ढूंढनी है।
इसलिए, यदि इनपुट है s = "001100", तो आउटपुट 111011 होगा, क्योंकि हम उन्हें इस तरह स्थानांतरित कर सकते हैं: (00)1100 → 101(10)0 → 1010(10) → 10(10)01 → 100(10)1 → 1(00)011 → 111011।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- length := s का आकार
- zeros := s में 0 की संख्या
- यदि zeros < 2, तो
- s वापस करें
- s := s के बाएं से सभी '1' हटाएं
- leading_ones := length - s का आकार
- leading_ones := leading_ones + zeros - 1
- trailing_ones := length - leading_ones - 1
- answer_left := leading_ones संख्या में 1
- answer_right := trailing_ones संख्या में 1
- answer_left को 0 और answer_right के साथ जोड़कर वापस करें
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
def solve(s):
length = len(s)
zeros = s.count('0')
if zeros < 2:
return s
s = s.lstrip('1')
leading_ones = length - len(s)
leading_ones += zeros - 1
trailing_ones = length - leading_ones - 1
answer_left = '1' * leading_ones
answer_right = '1' * trailing_ones
return ''.join([answer_left, '0', answer_right])
s = "001100"
print(solve(s))
इनपुट
"001100"
आउटपुट
111011