हमें एक स्ट्रिंग के रूप में एक इनपुट दिया जाता है, कार्य दिए गए इनपुट स्ट्रिंग के गैर-अतिव्यापी पैलिंड्रोमिक उप-स्ट्रिंग के जोड़े की संख्या का पता लगाना है। गिरफ्तारी का मान [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