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

C++ में सबसे लंबे समय तक दोहराए जाने वाले कैरेक्टर रिप्लेसमेंट


मान लीजिए कि हमने एक स्ट्रिंग s दी है जिसमें केवल बड़े अक्षर हैं, हम उस स्ट्रिंग पर अधिक से अधिक k संचालन कर सकते हैं। एक ऑपरेशन में, हम स्ट्रिंग के किसी भी चरित्र का चयन कर सकते हैं और इसे किसी अन्य अपरकेस अक्षरों में बदल सकते हैं। हमें उपरोक्त संक्रियाओं को करने के बाद प्राप्त होने वाले सभी दोहराए जाने वाले अक्षरों वाली सबसे लंबी उप-स्ट्रिंग की लंबाई का पता लगाना होगा। तो अगर इनपुट इस तरह है:"एबीएबी" और के =2, तो आउटपुट 4 होगा। ऐसा इसलिए है क्योंकि दो 'ए' दो 'बी' या इसके विपरीत हैं।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • अधिकतमगणना:=0, उत्तर:=0 और n:=स्ट्रिंग का आकार
  • 26 आकार की एक सरणी बनाएं, और j :=0
  • i के लिए:=0 से n - 1
    • cnt[s[i] – 'A'] को 1 से बढ़ाएं
    • अधिकतमगणना :=अधिकतम गणना, गणना[s[i] - 'A']
    • जबकि j <=i और i – j + 1 – maxCount> k, do
      • सीएनटी घटाएं [एस [जे] - 'ए']
      • j को 1 से बढ़ाएं
    • उत्तर :=अधिकतम उत्तर, i – j + 1
  • वापसी उत्तर

उदाहरण(C++)

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int characterReplacement(string s, int k) {
      int maxCount = 0;
      int ans = 0;
      int n = s.size();
      vector <int> cnt(26);
      int j = 0;
      for(int i = 0; i < n; i++){
         cnt[s[i] - 'A']++;
         maxCount = max(maxCount, cnt[s[i] - 'A']);
         while(j <= i && i - j + 1 - maxCount > k){
            --cnt[s[j] - 'A'];
            j++;
         }
         ans = max(ans, i - j + 1);
      }
      return ans;
   }
};
main(){
   Solution ob;
   cout << ob.characterReplacement("ABAB", 2);
}

इनपुट

"ABAB"
2

आउटपुट

4

  1. C++ में प्रत्येक वर्ण प्रतिस्थापन क्वेरी के बाद पालिंड्रोम की जाँच करें

    मान लें कि हमारे पास सेट Q में एक स्ट्रिंग और कुछ प्रश्न हैं। प्रत्येक क्वेरी में पूर्णांक i और j की एक जोड़ी होती है। और एक अन्य चरित्र सी। हमें अनुक्रमणिका i और j के वर्णों को नए वर्ण c से बदलना होगा। और बताएं कि स्ट्रिंग पैलिंड्रोम है या नहीं। मान लीजिए एक स्ट्रिंग AXCDCMP की तरह है, यदि हम एक क्

  1. सी ++ में स्ट्रिंग एट () फ़ंक्शन

    इस खंड में, हम देखेंगे कि C++ में at a () फंक्शन क्या है। किसी दिए गए स्थान पर वर्ण तक पहुँचने के लिए at() फ़ंक्शन का उपयोग किया जाता है। इस कार्यक्रम में, हम a () फ़ंक्शन का उपयोग करके प्रत्येक वर्ण के माध्यम से पुनरावृति करेंगे और उन्हें अलग-अलग पंक्तियों में प्रिंट करेंगे। उदाहरण कोड #include<

  1. strpbrk () सी ++ में

    यह सी ++ में एक स्ट्रिंग फ़ंक्शन है जो दो स्ट्रिंग लेता है और स्ट्रिंग 1 में स्ट्रिंग 2 के किसी भी चरित्र की पहली घटना को ढूंढता है। यदि कोई है तो यह स्ट्रिंग 1 में वर्ण को पॉइंटर लौटाता है, अन्यथा न्यूल लौटाता है। यह NULL वर्णों को समाप्त करने के लिए लागू नहीं है। strpbrk() का सिंटैक्स निम्नानुसार