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

C++ में दिए गए स्ट्रिंग का अधिकतम वजन परिवर्तन

समस्या कथन

केवल ए और बी से मिलकर एक स्ट्रिंग को देखते हुए। हम किसी भी कैरेक्टर को टॉगल करके दिए गए स्ट्रिंग को दूसरी स्ट्रिंग में बदल सकते हैं। इस प्रकार दिए गए स्ट्रिंग के कई परिवर्तन संभव हैं। कार्य अधिकतम वजन परिवर्तन के वजन का पता लगाना है।

एक डंक के वजन की गणना निम्न सूत्र का उपयोग करके की जाती है -

Weight of string = Weight of total pairs + weight of single characters - Total number of toggles.
  • दो क्रमागत वर्णों को एक जोड़ा तभी माना जाता है जब वे भिन्न हों।

  • एक जोड़ी का भार (दोनों वर्ण भिन्न हैं) =4

  • एक वर्ण का भार =1

यदि इनपुट स्ट्रिंग है - "AA" तो आउटपुट 3 होगा -

  • दिए गए स्ट्रिंग के रूपांतरण "AA", "AB", "BA" और "BB" हैं।

  • अधिकतम वजन परिवर्तन "एबी" या "बीए" है। और वजन "एक जोड़ी - एक टॉगल" =4-1 =3 है।

एल्गोरिदम

1. If (n == 1)
   maxWeight(str[0..n-1]) = 1
2. Else If str[0] != str[1]
   maxWeight(str[0..n-1]) = Max (1 + maxWeight(str[1..n-1]), 4 + getMaxRec(str[2..n-1])
3. Elses
   maxWeight(str[0..n-1]) = Max (1 + maxWeight(str[1..n-1]), 3 + getMaxRec(str[2..n-1])

उदाहरण

#include<bits/stdc++.h>
using namespace std;
int getMaxRec(string &str, int i, int n, int lookup[]){
   if (i >= n) {
      return 0;
   }
   if (lookup[i] != -1) {
      return lookup[i];
   }
   int ans = 1 + getMaxRec(str, i + 1, n, lookup);
   if (i + 1 < n) {
      if (str[i] != str[i+1]) {
         ans = max(4 + getMaxRec(str, i + 2, n, lookup), ans);
      } else {
         ans = max(3 + getMaxRec(str, i + 2, n, lookup), ans);
      }
   }
   return lookup[i] = ans;
}
int getMaxWeight(string str){
   int n = str.length();
   int lookup[n];
   memset(lookup, -1, sizeof lookup);
   return getMaxRec(str, 0, str.length(), lookup);
}
int main(){
   string str = "AA";
   cout << "Result = " << getMaxWeight(str) << endl;
   return 0;
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्न आउटपुट उत्पन्न करता है -

Result = 3

  1. जांचें कि दी गई स्ट्रिंग सी ++ में योग-स्ट्रिंग है या नहीं

    यहां हम देखेंगे कि कैसे जांचा जाए कि कोई स्ट्रिंग सम-स्ट्रिंग है या नहीं। एक स्ट्रिंग को सम-स्ट्रिंग कहा जाता है यदि सबसे दाहिने सबस्ट्रिंग को इसके पहले दो सबस्ट्रिंग के योग के रूप में लिखा जा सकता है, और वही इसके पहले सबस्ट्रिंग के लिए पुनरावर्ती सत्य है। मान लीजिए 12243660 की तरह एक स्ट्रिंग एक यो

  1. जांचें कि क्या दी गई स्ट्रिंग सी ++ में पैलिंड्रोम का घूर्णन है

    यहां हम देखेंगे, एक स्ट्रिंग निश्चित रोटेशन के बाद पैलिंड्रोम है या नहीं। पैलिंड्रोम एक स्ट्रिंग है जो दोनों दिशाओं में समान होती है। एक स्ट्रिंग रोटेशन एक पैलिंड्रोम है यदि वह AAAAD जैसा है। यह सीधे पैलिंड्रोम नहीं है, लेकिन इसका रोटेशन AADAA एक पैलिंड्रोम है। यह जांचने के लिए कि कोई स्ट्रिंग पैलि

  1. C++ में दिए गए उत्पाद के साथ N पूर्णांकों की अधिकतम GCD

    मान लीजिए कि हम दो पूर्णांक N और P हैं। P, N अज्ञात पूर्णांकों का गुणनफल है। हमें उन पूर्णांकों का अधिकतम संभव GCD ज्ञात करना है। मान लीजिए एन =3, और पी =24, तो अलग-अलग समूह होंगे जैसे {1, 1, 24}, {1, 2, 12}, {1, 3, 8}, {1, 4, 6}, {2 , 2, 6}, {2, 3, 4}। जीसीडी हैं:1, 1, 1, 1, 2, 1. तो उत्तर यहां 2 ह