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

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


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

उदाहरण सहित समझ

इनपुट - str="abccdcdf"

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

व्याख्या - सबस्ट्रिंग जो विशेष पालिंड्रोम हैं: "cc", "cdc", "dcd"

इनपुट - str="baabaab"

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

व्याख्या - सबस्ट्रिंग जो विशेष पालिंड्रोम हैं: "aa", "aabaa", "aba", "aa"

प्रोग्राम में उपयोग किया गया दृष्टिकोण

  • वर्णमाला की एक स्ट्रिंग बनाएं और इसकी लंबाई की गणना करें। आगे के प्रसंस्करण के लिए डेटा को फंक्शन में पास करें।
  • अस्थायी चर count और i घोषित करें और उन्हें 0 पर सेट करें।
  • स्ट्रिंग के आकार का एक सरणी बनाएं और इसे 0 से आरंभ करें।
  • WHILE शुरू करें जब तक i स्ट्रिंग की लंबाई से कम है।
  • WHILE के अंदर, total को 1 और j को i+1 पर सेट करें।
  • दूसरा WHILE शुरू करें जब तक str[i] = str[j] और j स्ट्रिंग की लंबाई से कम है।
  • WHILE के अंदर, total को 1 से बढ़ाएँ और j को 1 से बढ़ाएँ।
  • काउंट को count + (total * (total + 1) / 2) के रूप में सेट करें, arr[i] को total और i को j पर सेट करें।
  • j से 1 तक स्ट्रिंग की लंबाई तक FOR लूप शुरू करें।
  • जांचें यदि str[j] = str[j-1] तो arr[j] को arr[j-1] पर सेट करें।
  • temp को str[j-1] पर सेट करें और जांचें यदि j > 0 और j < स्ट्रिंग की लंबाई से एक कम और temp = str[j+1] और str[j] != temp तो काउंट को count + min(arr[j-1], arr[j+1]) पर सेट करें।
  • काउंट को count - स्ट्रिंग की लंबाई पर सेट करें।
  • काउंट लौटाएँ।
  • परिणाम प्रिंट करें।

उदाहरण

#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] की समावेशी रेंज में सुपरपैलिंड्रोम की संख्या ढूंढनी है। उदाहरण के लिए, यदि L = 5 और R = 500, तो आउटपुट 3

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

    मान लीजिए हमारे पास तीन स्ट्रिंग्स s1, s2 और s3 हैं। फिर जांचें कि क्या s3, s1 और s2 को इंटरलीव करके बनाई गई है या नहीं। यदि स्ट्रिंग्स aabcc, s2 = dbbca, और s3 = aadbbcbcac हैं, तो परिणाम true होगा। हल करने का दृष्टिकोण इस समस्या को हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे: solve() नामक

  1. - C++ में दो स्ट्रिंग्स में सामान्य उपअनुक्रम गिनना

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