ধরুন আমাদের কাছে ছোট হাতের অক্ষর সহ একটি স্ট্রিং রয়েছে এবং আমাদের কাছে নন-নেতিবাচক মান কল করা খরচের একটি তালিকা রয়েছে, স্ট্রিং এবং তালিকার দৈর্ঘ্য একই। আমরা খরচ খরচের জন্য s[i] অক্ষর মুছে ফেলতে পারি, এবং তারপর s[i] এবং খরচ[i] উভয়ই মুছে ফেলা হয়। পরপর পুনরাবৃত্তি করা সমস্ত অক্ষর মুছে ফেলার জন্য আমাদের সর্বনিম্ন খরচ খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি s ="xxyyx" nums =[2, 3, 10, 4, 6] এর মত হয়, তাহলে আউটপুট হবে 6, যেহেতু আমরা মোট খরচের জন্য s[0] এবং s[3] কে মোমবাতি করি। 2 + 4 =6।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব
-
একটি স্ট্যাক স্ট্যাক সংজ্ঞায়িত করুন
-
খরচ :=0
-
আরম্ভ করার জন্য i :=0, যখন i
-
যদি st-এর আকার 0 না হয় এবং s[st-এর শীর্ষ] s[i] এর মতো হয়, তাহলে:
-
যদি nums[st এর উপরে]> nums[i] হয়, তাহলে:
-
খরচ :=খরচ + সংখ্যা[i]
-
-
অন্যথায়:
-
খরচ :=খরচ + সংখ্যা [স্টের উপরে]
-
st
থেকে পপ উপাদান -
আমাকে st
এ ঠেলে দাও
-
-
-
অন্যথায়
-
আমাকে st
এ ঠেলে দাও
-
-
-
ফেরত খরচ
আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি
উদাহরণ
#include <bits/stdc++.h> using namespace std; class Solution { public: int solve(string s, vector<int>& nums) { stack<int> st; int cost = 0; for (int i = 0; i < s.size(); ++i) { if (st.size() && s[st.top()] == s[i]) { if (nums[st.top()] > nums[i]) { cost += nums[i]; } else { cost += nums[st.top()]; st.pop(); st.push(i); } } else { st.push(i); } } return cost; } }; int solve(string s, vector<int>& nums) { return (new Solution())->solve(s, nums); } main(){ vector<int> v = {2, 3, 10, 4, 6}; string s = "xxyyx"; cout << solve(s, v); }
ইনপুট
"xxyyx",{2,3,10,4,6}
আউটপুট
6