मान लीजिए कि हमारे पास n अक्षरों वाला एक स्ट्रिंग S है। अक्षर या तो 'R' या 'U' होते हैं। 2डी प्लेन में, रोबोट दाएं या ऊपर जा सकता है। जब यह 'R' होता है तो यह दायीं ओर गति करता है और जब यह 'U' होता है तो यह ऊपर की ओर बढ़ता है। हालाँकि स्ट्रिंग बहुत बड़ी है, हम स्ट्रिंग को छोटा बनाना चाहते हैं। "आरयू" या "यूआर" जैसी जोड़ी को विकर्ण चाल "डी" के रूप में बदल दिया जाएगा। हमें अंतिम अपडेट की गई कम की गई स्ट्रिंग की लंबाई का पता लगाना है।
इसलिए, यदि इनपुट S ="RUURU" जैसा है, तो आउटपुट 5 होगा, क्योंकि स्ट्रिंग "DUD" होगी
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
ans := 0 n := size of S for initialize i := 0, when i < n, update (increase i by 1), do: if S[i] is not equal to S[i + 1], then: (increase i by 1) (increase ans by 1) return ans
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; int solve(string S){ int ans = 0; int n = S.size(); for (int i = 0; i < n; ++i){ if (S[i] != S[i + 1]) i++; ans++; } return ans; } int main(){ string S = "RUURU"; cout << solve(S) << endl; }
इनपुट
"RUURU"
आउटपुट
3