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

सी ++ में एक स्ट्रिंग में विशेष पैलिंड्रोम की गणना करें

हमें एक स्ट्रिंग str दिया जाता है। लक्ष्य str के सभी सबस्ट्रिंग को गिनना है जो विशेष पैलिंड्रोम हैं और जिनकी लंबाई 1 से अधिक है। विशेष पैलिंड्रोम ऐसे तार होते हैं जिनमें या तो सभी समान वर्ण होते हैं या केवल मध्य वर्ण भिन्न होते हैं। उदाहरण के लिए यदि स्ट्रिंग "बाबा" है तो विशेष पैलिंड्रोम जो मूल के स्थानापन्न हैं, वे हैं "आ", "आबा", "अबा", "आ"

आइए उदाहरणों से समझते हैं।

इनपुट - str="abccdcdf"

आउटपुट - एक स्ट्रिंग में विशेष पैलिंड्रोम की संख्या है - 3

स्पष्टीकरण − वे सबस्ट्रिंग जो विशेष पैलिंड्रोम हैं - "cc", "cdc", "dcd"

इनपुट - str="बाबाब"

आउटपुट - एक स्ट्रिंग में विशेष पैलिंड्रोम की संख्या है - 4

स्पष्टीकरण - सबस्ट्रिंग जो विशेष पैलिंड्रोम हैं - "आ", "आबा", "अबा", "आ"

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • अक्षरों की एक स्ट्रिंग बनाएं और इसकी लंबाई की गणना करें। आगे की प्रक्रिया के लिए डेटा को फ़ंक्शन में पास करें।

  • अस्थायी चरों की गिनती और i घोषित करें और उन्हें 0 पर सेट करें

  • एक स्ट्रिंग के आकार की एक सरणी बनाएं और इसे 0 से प्रारंभ करें।

  • तब तक शुरू करें जब तक कि मैं एक स्ट्रिंग की लंबाई से कम नहीं हो जाता

  • थोड़ी देर के अंदर, एक वेरिएबल को कुल 1 और एक वेरिएबल j को i + 1 पर सेट करें

  • दूसरा तब तक शुरू करें जब तक कि str[i] =str[j] और j एक स्ट्रिंग की लंबाई से कम न हो

  • थोड़ी देर के अंदर, कुल को 1 और j को 1 से बढ़ाएँ

  • गिनती को गिनती के रूप में सेट करें + (कुल * (कुल + 1) / 2, गिरफ्तारी [i] कुल और i से j

  • एक स्ट्रिंग की लंबाई तक j से 1 तक के लिए लूप प्रारंभ करें

  • जांचें कि क्या str[j] =str[j-1] फिर arr[j] को arr[j-1]

    पर सेट करें
  • एक चर अस्थायी को str[j-1] पर सेट करें और जांचें कि क्या j> 0 और j <एक स्ट्रिंग की लंबाई कम है और temp =str[j+1] और sr[j]!=temp फिर गिनती के रूप में सेट करें + मिनट (गिरफ्तारी [जे -1], गिरफ्तारी [जे + 1])

  • गिनती को गिनती सेट करें - एक स्ट्रिंग की लंबाई

  • गिनती लौटाएं

  • परिणाम प्रिंट करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int count_palindromes(string str, int len){
   int count = 0, i = 0;
   int arr[len] = { 0 };
   while (i < len){
      int total = 1;
      int j = i + 1;
      while (str[i] == str[j] && j < len){
         total++;
         j++;
      }
      count += (total * (total + 1) / 2);
      arr[i] = total;
      i = j;
   }
   for (int j = 1; j < len; j++){
      if (str[j] == str[j - 1]){
         arr[j] = arr[j - 1];
      }
      int temp = str[j - 1];
      if (j > 0 && j < (len - 1) && (temp == str[j + 1] && str[j] != temp)){
         count += min(arr[j-1], arr[j+1]);
      }
   }
   count = count - len;
   return count;
}
int main(){
   string str = "bcbaba";
   int len = str.length();
   cout<<"Count of special palindromes in a String are: "<< count_palindromes(str, len);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of special palindromes in a String are: 3

  1. C++ . में सुपर पालिंड्रोम

    मान लीजिए कि हमारे पास एक धनात्मक पूर्णांक N है, जिसे एक पालिंड्रोम होने पर एक सुपरपैलिंड्रोम कहा जाता है, और यह एक पैलिंड्रोम का वर्ग भी है। अब मान लें कि हमारे पास दो धनात्मक पूर्णांक L और R हैं, हमें [L, R] की समावेशी श्रेणी में सुपरपैलिंड्रोम की संख्या ज्ञात करनी है। इसलिए, अगर इनपुट एल =5 और आ

  1. C++ में इंटरलीविंग स्ट्रिंग

    मान लीजिए कि हमारे पास तीन तार s1, s2 और s3 हैं। फिर जांचें कि s1 और s2 को आपस में मिलाने से s3 बनता है या नहीं। इसलिए यदि स्ट्रिंग्स aabcc, s2 =dbbca हैं, और s3 aadbbcbcac हैं, तो परिणाम सही होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - हल () नामक एक विधि को परिभाषित करें, यह s1, s2, s

  1. सी ++ में दो स्ट्रिंग्स में सामान्य बाद की गणना करें

    हमें दो तार दिए गए हैं, मान लें कि str1 और str2 वर्ण युक्त हैं और कार्य दोनों स्ट्रिंग्स में सामान्य बाद की गणना करना है। नीचे दिए गए प्रोग्राम में हम डायनेमिक प्रोग्रामिंग का उपयोग कर रहे हैं और इसके लिए हमें यह जानना होगा कि डायनेमिक प्रोग्रामिंग क्या है और इसका उपयोग किन समस्याओं में किया जा सकता