मान लीजिए कि हमारे पास एक बाइनरी स्ट्रिंग है। आइए एक ऑपरेशन पर विचार करें जहां हम एक बिट फ्लिप कर सकते हैं। स्ट्रिंग s को वैकल्पिक स्ट्रिंग कहा जाता है यदि कोई दो आसन्न वर्ण समान नहीं हैं। हमें बारी-बारी से संचालन करने के लिए आवश्यक न्यूनतम संख्या का पता लगाना होगा।
इसलिए, अगर इनपुट s ="11100011" जैसा है, तो आउटपुट 3 होगा क्योंकि अगर हम बिट्स को 1, 4 और 7 की स्थिति में फ्लिप करते हैं, तो यह "10101010" होगा, तो सभी बारी-बारी से हो रहे हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
परिवर्तन :=0
-
सम_1:=0, सम_0:=0
-
विषम_1:=0, विषम_0:=0
-
मैं के लिए 0 से s-1 के आकार की सीमा में, करो
-
अगर मैं सम है, तो
-
अगर s[i] '1' के समान है, तो
-
सम_1 :=सम_1 + 1
-
-
अन्यथा,
-
सम_0 :=सम_0 + 1
-
-
-
अन्यथा,
-
अगर s[i] '1' के समान है, तो
-
विषम_1 :=विषम_1 + 1
-
-
अन्यथा,
-
विषम_0:=विषम_0 + 1
-
-
-
-
अगर (सम_1+विषम_0)> (सम_0+विषम_1), तो
-
परिवर्तन :=सम_0 + विषम_1
-
-
अन्यथा,
-
परिवर्तन :=सम_1 + विषम_0
-
-
वापसी परिवर्तन
उदाहरण (पायथन)
आइए बेहतर समझने के लिए निम्नलिखित कार्यान्वयन देखें &minnus;
def solve(s): change = 0 even_1 = 0 even_0 = 0 odd_1 = 0 odd_0 = 0 for i in range(len(s)): if(i%2 == 0): if(s[i]=='1'): even_1 +=1 else: even_0 +=1 else: if(s[i] == '1'): odd_1 +=1 else: odd_0 +=1 if((even_1+odd_0)>(even_0+odd_1)): change = even_0 + odd_1 else: change = even_1 + odd_0 return change s = "11100011" print(solve(s))
इनपुट
"11100011"
आउटपुट
3