मान लीजिए कि हमारे पास n वर्णों के साथ एक स्ट्रिंग S है। वर्ण या तो '+' या '-' होंगे। पत्थरों का ढेर है, n बार हमने ढेर से एक पत्थर लिया या ढेर में एक पत्थर जोड़ा। ढेर से एक पत्थर लेने के प्रत्येक ऑपरेशन से पहले ढेर खाली नहीं था। हमें इन संक्रियाओं को करने के बाद पत्थरों की न्यूनतम संभव संख्या ज्ञात करनी होगी जो ढेर में हो सकते हैं। अगर हमने i-th ऑपरेशन पर स्टोन लिया, तो S[i] बराबर "-" है, अगर जोड़ा जाए, तो S[i] "+" के बराबर है।
इसलिए, यदि इनपुट S ="++-++" जैसा है, तो आउटपुट 3 होगा। यदि हमारे पास शुरुआत में ढेर में 0 पत्थर थे, तो ऑपरेशन करने के बाद पत्थरों की संख्या 3 के बराबर होगी।पी>
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
n := size of S for initialize i := 0, when i < n, update (increase i by 1), do: res := (if S[i] is same as '-', then maximum of res - 1 and 0, otherwise res + 1) return res
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; int solve(string S){ int n = S.size(), res = 0; for (int i = 0; i < n; i++) res = (S[i] == '-') ? max(res - 1, 0) : res + 1; return res; } int main(){ string S = "++-++"; cout << solve(S) << endl; }
इनपुट
"++-++"
आउटपुट
3