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

C++ में दिए गए स्ट्रिंग के गैर-अतिव्यापी पैलिंड्रोमिक उप-स्ट्रिंग के जोड़े की गणना करें

हमें एक स्ट्रिंग के रूप में एक इनपुट दिया जाता है, कार्य दिए गए इनपुट स्ट्रिंग के गैर-अतिव्यापी पैलिंड्रोमिक उप-स्ट्रिंग के जोड़े की संख्या का पता लगाना है। गिरफ्तारी का मान [i] [j] सत्य है यदि विकल्प एक पैलिंड्रोम है, अन्यथा गलत है। हम संयोजन को स्ट्रिंग से बाहर निकालेंगे और जांचेंगे कि क्या जोड़े मानदंडों को पूरा करते हैं।

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

इनपुट: एबीसी

आउटपुट: गैर-अतिव्यापी पैलिंड्रोमिक उप-स्ट्रिंग के जोड़े की गणना 3 है

स्पष्टीकरण: संभावित जोड़े हैं (ए) (बी) (सी), (ए) (बीसी), (एबी) (सी), (एबीसी)

इनपुट: एबीसीडी

आउटपुट: गैर-अतिव्यापी पैलिंड्रोमिक उप-स्ट्रिंग के जोड़े की गणना 8 है

स्पष्टीकरण: संभावित जोड़े हैं (ए) (बी) (सी) (डी), (ए) (बी) (सीडी), (ए) (बीसी) (डी), (ए) (बीसीडी), (एबी) (सी) (डी),(एबी)(सीडी),

(एबीसी)(डी),(एबीसीडी)

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

  • एक स्ट्रिंग को इनपुट के रूप में लिया जाता है और आगे की प्रक्रिया के लिए पेयर_काउंट (टेक्स्ट) फ़ंक्शन में पास किया जाता है।
  • शुरुआत में 100 arr आकार का एक बूलियन 2D सरणी[ ][ ] बनाया जाता है और इसे बॉटम अप एप्रोच में भरने के लिए बनाए रखा जाता है और इनपुट स्ट्रिंग (टेक्स्ट) को एक कैरेक्टर ऐरे में बदल दिया जाता है।
  • सरणी की गणना arr[i+1][j-1] की जांच करके की जाती है, यदि मान सत्य है और str[i] str[j] के समान है, तो हम arr[i] बनाते हैं। [जे] सच। अन्यथा, arr[i][j] का मान असत्य बना दिया जाता है।
  • उसके बाद प्रारंभ[ ] और अंत[ ] प्रारंभ किया जाता है और प्रारंभ[i] सूचकांक के बाईं ओर पैलिंड्रोम की संख्या की गणना करता है (i सहित) और अंत [i] संख्या की पैलिंड्रोम गणना को संग्रहीत करता है सूचकांक के दाईं ओर तत्वों का (i सहित)
  • एक लूप को 0 से str.length() - 1 तक पुनरावृत्त किया जाता है और लूप के अंदर परिणाम की गणना start[i] * end[i + 1] के उत्पाद के साथ परिणाम को जोड़कर की जाती है।

उदाहरण

import java.io.*;
import java.util.*;
class tutorialPoint {
   static int SIZE = 100;
   static int pair_count(String str) {
      boolean arr[][] = new boolean[SIZE][SIZE];
      char[] ch = str.toCharArray();
      for (int i = 0; i < ch.length; i++) {
         for (int j = 0; j < ch.length; j++) {
            arr[i][j] = false;
         }
      }
      for (int j = 1; j <= ch.length; j++) {
         for (int i = 0; i <= ch.length - j; i++) {
            if (j <= 2) {
               if (ch[i] == ch[i + j - 1]) {
                  arr[i][i + j - 1] = true;
               }
            } else if (ch[i] == ch[i + j - 1]) {
               arr[i][i + j - 1] = arr[i + 1][i + j - 2];
            }
         }
      }
      int start[] = new int[str.length()];
      int end[] = new int[str.length()];
      start[0] = 1;
      for (int i = 1; i < str.length(); i++) {
         for (int j = 0; j <= i; j++) {
            if (arr[j][i] == true) {
               start[i]++;
            }
         }
      }
      end[str.length() - 1] = 1;
      for (int i = str.length() - 2; i >= 0; i--) {
         end[i] = end[i + 1];
         for (int j = str.length() - 1; j >= i; j--) {
            if (arr[i][j] == true) {
               end[i]++;
            }
         }
      }
      int result = 0;
      for (int i = 0; i < str.length() - 1; i++) {
         result = result + start[i] * end[i + 1];
      }
      return result;
   }

   public static void main(String[] args) {
      Scanner scan = new Scanner(System.in); //ABCD
      String text = scan.next();
      System.out.println("Count pairs of non-overlapping palindromic sub-strings is\t" + pair_count(text));
   }
}

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

आउटपुट

Count pairs of non-overlapping palindromic sub-strings is 8

  1. C++ में दिए गए XOR के साथ सभी जोड़ियों की गणना करें

    इस ट्यूटोरियल में, हम दिए गए XOR के साथ युग्मों की संख्या ज्ञात करने के लिए एक प्रोग्राम पर चर्चा करेंगे। इसके लिए हमें एक सरणी और एक मान प्रदान किया जाएगा। हमारा काम उन युग्मों की संख्या ज्ञात करना है जिनका XOR दिए गए मान के बराबर है। उदाहरण #include<bits/stdc++.h> using namespace std; //ret

  1. दिए गए स्ट्रिंग के सभी पैलिंड्रोमिक क्रमपरिवर्तनों को वर्णमाला के क्रम में C++ . में प्रिंट करें

    इस समस्या में, हमें n आकार की एक स्ट्रिंग दी गई है। और हमें सभी संभव पैलिंड्रोमिक क्रमपरिवर्तन को प्रिंट करना होगा जो कि वर्णानुक्रम में स्ट्रिंग के वर्णों का उपयोग करके उत्पन्न किया जा सकता है। यदि स्ट्रिंग प्रिंट -1 का उपयोग करके पैलिंड्रोम नहीं बनाया गया है। आइए विषय को बेहतर ढंग से समझने के लिए

  1. C++ . में दिए गए स्ट्रिंग में "1(0+)1" के सभी पैटर्न खोजें

    मान लीजिए कि एक स्ट्रिंग में 1(0+)1 जैसे पैटर्न हैं। जहां (0+) 1s की गैर-रिक्त लगातार घटनाओं को इंगित करता है। हमें सभी पैटर्न खोजने होंगे। पैटर्न ओवरलैप कर सकते हैं। स्ट्रिंग जरूरी नहीं कि एक बाइनरी स्ट्रिंग हो। यह केवल अंक और लोअरकेस वर्ण धारण कर सकता है। मान लीजिए कि स्ट्रिंग 1101001 की तरह है, त