मान लीजिए हमारे पास n बिट्स का एक बाइनरी स्ट्रिंग S है। इसमें कोई अनावश्यक अग्रणी शून्य नहीं हैं। हम S पर दो अलग-अलग ऑपरेशन कर सकते हैं:
किसी भी आसन्न बिट्स की जोड़ी को स्वैप करें
सभी "11" को "1" से बदलें
मान लीजिए val(S), S का दशमलव प्रतिनिधित्व है। हमें न्यूनतम सही स्ट्रिंग ढूंढनी है, जहां सही स्ट्रिंग A, दूसरे सही स्ट्रिंग 'B' से छोटी होती है जब val(A) < val(B)।
उदाहरण के लिए, यदि इनपुट S = "1001" है, तो आउटपुट 100 होगा, क्योंकि हम ऑपरेशन इस तरह कर सकते हैं: "1001" -> "1010" -> "1100" -> "100"।
चरण
इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:
n := S का आकार res := एक खाली स्ट्रिंग res := res + S[0] for initialize i := 1, when i < n, update (increase i by 1), do: if S[i] is same as '0', then: res := res concatenate "0" return res
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#includeusing namespace std; string solve(string S){ int n = S.size(); string res = ""; res += S[0]; for (int i = 1; i < n; i++){ if (S[i] == '0'){ res += "0"; } } return res; } int main(){ string S = "1001"; cout << solve(S) << endl; }
इनपुट
"1001"
आउटपुट
100