Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में लगातार डुप्लिकेट कैरेक्टर हटाने की न्यूनतम लागत


मान लीजिए हमारे पास लोअरकेस अक्षरों की एक स्ट्रिंग है और हमारे पास लागतों की एक सूची भी है जिसे costs कहा जाता है। स्ट्रिंग और सूची की लंबाई समान होती है। हम कैरेक्टर s[i] को costs[i] लागत पर हटा सकते हैं, और फिर दोनों s[i] और costs[i] हट जाते हैं। हमें सभी लगातार दोहराए जाने वाले कैरेक्टर्स को हटाने की न्यूनतम लागत ज्ञात करनी है।

उदाहरण के लिए, यदि इनपुट s = "xxyyx" और nums = [2, 3, 10, 4, 6] है, तो आउटपुट 6 होगा, क्योंकि हम s[0] और s[3] को कुल लागत 2 + 4 = 6 पर हटा सकते हैं।

समाधान दृष्टिकोण (स्टैक आधारित)

  • एक स्टैक st परिभाषित करें जो इंडेक्स स्टोर करेगा।
  • cost := 0
  • स्ट्रिंग के प्रत्येक कैरेक्टर i के लिए:
    • यदि स्टैक खाली नहीं है और s[st.top()] == s[i] (लगातार डुप्लिकेट):
      • यदि nums[st.top()] > nums[i], तो सस्ते वाले को हटाएं: cost += nums[i]
      • अन्यथा: cost += nums[st.top()], स्टैक से पॉप करें, और वर्तमान इंडेक्स पुश करें।
    • अन्यथा: वर्तमान इंडेक्स स्टैक में पुश करें।
  • cost वापस करें।

उदाहरण (C++ कोड)

#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 main() { 
    vector<int> v = {2, 3, 10, 4, 6}; 
    string s = "xxyyx"; 
    cout << (new Solution())->solve(s, v); 
    return 0; 
}

इनपुट

"xxyyx", {2,3,10,4,6}

आउटपुट

6

  1. C++ में कार्टेशियन निर्देशांकों को जोड़ने की न्यूनतम लागत ज्ञात करने का प्रोग्राम C++ में कार्टेशियन निर्देशांकों को जोड़ने की न्यूनतम लागत ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास 2D कार्टेशियन निर्देशांक बिंदुओं (x, y) की एक सूची है। हम (x0, y0) और (x1, y1) को जोड़ सकते हैं, जिसकी लागत |x0 - x1| + |y0 - y1| है। यदि हमें किसी भी संख्या में बिंदुओं को जोड़ने की अनुमति है, तो हमें वह न्यूनतम लागत ज्ञात करनी होगी जिससे हर बिंदु एक पथ से जुड़ा हो।उदाहरण के लिए

  1. C++ में डुप्लिकेट उपट्री ढूंढना C++ में डुप्लिकेट उपट्री ढूंढना

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें सभी डुप्लिकेट उपट्री ढूंढने हैं। इसलिए प्रत्येक प्रकार के डुप्लिकेट उपट्री के लिए, हमें उनमें से किसी एक का रूट नोड लौटाना है। मान लीजिए हमारे पास ऐसा ट्री है: डुप्लिकेट उपट्री हैं: हल का दृष्टिकोण इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  1. - पायथन में लगातार सामान्य वर्णों वाले सबस्ट्रिंग की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक स्ट्रिंग s है, हमें समान वर्णों वाले सबसे लंबे सबस्ट्रिंग की लंबाई ढूंढनी है। उदाहरण के लिए, यदि इनपुट abbbaccabbbba है, तो आउटपुट 4 होगा, क्योंकि चार लगातार b हैं। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे: यदि s का आकार 0 है, तो 0 वापस करें s := s + खाली स्थान ct :=