मान लीजिए कि हमारे पास एक स्ट्रिंग है। हमें उस स्ट्रिंग में बैलेंसिंग पोजीशन काउंट का पता लगाना है जहाँ से स्ट्रिंग के बाएँ और दाएँ भाग में समान वर्ण हों। पात्रों की आवृत्ति कोई फर्क नहीं पड़ता। इसलिए यदि स्ट्रिंग "ABAABA" है, तो संतुलन स्थितियों की संख्या 3 है। ये स्थितियाँ हैं AB|AABA, ABA|ABA, ABAA|BA।
इसे हल करने के लिए, हम कुछ कुशल दृष्टिकोण का पालन करेंगे। स्ट्रिंग को पार करने के बाद हम सभी वर्णों की गणना के साथ सबसे पहले सही [] महसूस करते हैं। फिर स्ट्रिंग को बाएं से दाएं घुमाएं। प्रत्येक वर्ण के लिए हम बाएं [] में इसकी गिनती बढ़ाते हैं और गिनती को दाएं घटाते हैं। किसी भी बिंदु को पार करने के लिए, यदि सभी वर्ण जिनके बाईं ओर गैर-शून्य मान हैं, तो भी गैर-शून्य मान दाईं ओर है, और इसके विपरीत भी सत्य है। फिर परिणाम बढ़ाएँ।
उदाहरण
#include <iostream> #include <algorithm> #define MAX_CHAR 256 using namespace std; int countBalancePoints(string str) { int left[MAX_CHAR] = {0}; int right[MAX_CHAR] = {0}; for (int i=0; i<str.length(); i++) right[str[i]]++; int count = 0; for (int i=0; i < str.length() ; i++) { left[str[i]]++; right[str[i]]--; int j; for (j=0; j<MAX_CHAR; j++) { if ( (left[j] == 0 && right[j] != 0) || (left[j] != 0 && right[j] == 0)) break; } if (j == MAX_CHAR) count++; } return count; } int main() { char str[] = "ABAABA"; cout << "Number of balance points: " << countBalancePoints(str); }
आउटपुट
Number of balance points: 3