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

C++ में दी गई स्ट्रिंग के सबस्ट्रिंग में अंतिम गैर-दोहराने वाला वर्ण ढूंढने की क्वेरी

इस समस्या में, हमें एक स्ट्रिंग str और Q क्वेरी दी गई हैं, जिनमें प्रत्येक में दो पूर्णांक हैं। हमारा कार्य C++ में दी गई स्ट्रिंग के सबस्ट्रिंग में अंतिम गैर-दोहराने वाले वर्ण को ढूंढने की क्वेरी को हल करने के लिए प्रोग्राम बनाना है।

समस्या विवरण

प्रत्येक क्वेरी में, हमारे पास दो पूर्णांक L और R हैं। क्वेरी को हल करने के लिए, हम इंडेक्स L से इंडेक्स R से शुरू होने वाला एक सबस्ट्रिंग लेंगे। और सब-स्ट्रिंग में अंतिम वर्ण ढूंढेंगे जो गैर-दोहराने वाला है।

उदाहरण से समझते हैं

इनपुट: str = "Tutorialspoint" Q = 2

query = {{4, 8}, {2, 6}}

आउटपुट: -1, -1

व्याख्या

subStr[4...8] = "rials"। अंतिम गैर-दोहराने वाला वर्ण s है। लेकिन सभी वर्णों की फ्रीक्वेंसी 1 है।

subStr[2...6] = "toria"। अंतिम गैर-दोहराने वाला वर्ण a है। लेकिन सभी वर्णों की फ्रीक्वेंसी 1 है।

समाधान दृष्टिकोण

समस्या को हल करने के लिए, हमें एकल घटना आवृत्ति वाले वर्ण को ढूंढना होगा। इसके लिए, एक आसान और सरल दृष्टिकोण charFreq[][] की गणना के लिए एक मैट्रिक्स बनाना है। सबएरे क्वेरी को हल करने के लिए, हम सभी वर्णों की घटना की फ्रीक्वेंसी की जांच करेंगे और फ्रीक्वेंसी 1 वाले अंतिम वर्ण को वापस करेंगे।

C++ प्रोग्राम उदाहरण

#include <bits/stdc++.h>
using namespace std;

int charFreq[256][1000] = {0};

void initialiseCharFrequency(string str, int n) {
    charFreq[(int)str[0]][0] = 1;
    for (int i = 1; i < n; i++) {
        char ch = str[i];
        for (int j = 0; j < 256; j++) {
            char charToUpdate = (char)j;
            if (charToUpdate == ch)
                charFreq[j][i] = charFreq[j][i - 1] + 1;
            else
                charFreq[j][i] = charFreq[j][i - 1];
        }
    }
}

string returnCharFromString(char x) {
    string s(1, x);
    return s;
}

string lastUniqueChar(string str, int n, int start, int end) {
    for (int i = end; i >= start; i--) {
        char ch = str[i];
        if ((charFreq[(int)ch][end] - charFreq[(int)ch][start - 1]) == 1)
            return returnCharFromString(ch);
    }
    return "-1";
}

int main() {
    string str = "TutorialsPoint";
    int len = str.length();
    int Q = 3;
    int query[Q][2] = { { 2, 9 }, { 2, 3 }, { 0, 12 } };
    initialiseCharFrequency(str, len);
    for (int i = 0; i < Q; i++)
        cout << "\nFor Query " << (i+1) << ": The last non-repeating character in the sub-string of a given string is " << lastUniqueChar(str, len, query[i][0], query[i][1]);
}

आउटपुट

For Query 1: The last non-repeating character in the sub-string of a given string is P
For Query 2: The last non-repeating character in the sub-string of a given string is o
For Query 3: The last non-repeating character in the sub-string of a given string is n
  1. - C++ में दिए गए अंतर वाली जोड़ी ढूंढें

    समस्या विवरण एक सरणी A दी गई है जिसमें n विभिन्न तत्व हैं। हमें सरणी से एक जोड़ी (x, y) ढूंढनी है जिससे x और y का अंतर दिए गए अंतर d के बराबर हो। उदाहरण के लिए, यदि सरणी A = [10, 15, 26, 30, 40, 70] है और दिया गया अंतर 30 है, तो जोड़ियां (10, 40) और (30, 70) होंगी। हल दृष्टिकोण इस समस्या को हल करन

  1. - C++ प्रोग्राम: दी गई स्ट्रिंग के क्रमचय (Permutations) की संख्या ज्ञात करना

    हम एक स्ट्रिंग के कैरेक्टर्स को अलग-अलग क्रम में व्यवस्थित कर सकते हैं। यहां हम देखेंगे कि दी गई स्ट्रिंग से कितने क्रमचय बनाए जा सकते हैं। हम जानते हैं कि यदि एक स्ट्रिंग abc है। इसमें तीन कैरेक्टर्स हैं; हम उन्हें 3! = 6 अलग-अलग तरीकों से व्यवस्थित कर सकते हैं। इसलिए n कैरेक्टर्स वाली स्ट्रिंग क

  1. - C++ में स्ट्रिंग में किसी कैरेक्टर की फ्रीक्वेंसी खोजने का प्रोग्राम

    एक स्ट्रिंग एक एक-आयामी कैरेक्टर सरणी है जो नल कैरेक्टर द्वारा समाप्त होती है। स्ट्रिंग में कैरेक्टर्स की फ्रीक्वेंसी वह संख्या है जितनी बार वे स्ट्रिंग में आते हैं। उदाहरण के लिए: स्ट्रिंग: Football is a sport उपरोक्त स्ट्रिंग में वर्ण o की फ्रीक्वेंसी 3 है किसी विशेष वर्ण की फ्रीक्वेंसी खोजने का ए