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

C++ में दिए गए स्ट्रिंग के उप-स्ट्रिंग में अंतिम गैर-दोहराए जाने वाले वर्ण को खोजने के लिए प्रश्न

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

समस्या का विवरण

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

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट :str ="ट्यूटोरियल पॉइंट" Q =2

क्वेरी ={{4, 8}, {2, 6}}

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

स्पष्टीकरण

सबस्ट्र [4...8] ="रियाल"। अंतिम गैर-दोहराए जाने वाला वर्ण s है। लेकिन सभी वर्णों की आवृत्ति 1 होती है।

सबस्ट्र [2...6] ="टोरिया"। अंतिम गैर-दोहराए जाने वाला वर्ण है a. लेकिन सभी वर्णों की आवृत्ति 1 होती है।

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

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

उदाहरण

#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 विभिन्न तत्व हैं। हमें सरणी A से एक युग्म (x, y) ज्ञात करना है, ताकि x और y के बीच का अंतर दिए गए अंतर d के समान हो। मान लीजिए कि तत्वों की एक सूची A =[10, 15, 26, 30, 40, 70] की तरह है, और दिया गया अंतर 30 है, तो जोड़ी होगी (10, 40) और (30, 70) इस समस्या को

  1. सी ++ प्रोग्राम किसी दिए गए स्ट्रिंग के क्रमपरिवर्तन की संख्या का पता लगाने के लिए

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

  1. सी ++ प्रोग्राम एक स्ट्रिंग में एक चरित्र की आवृत्ति का पता लगाने के लिए

    एक स्ट्रिंग एक आयामी वर्ण सरणी है जिसे एक शून्य वर्ण द्वारा समाप्त किया जाता है। एक स्ट्रिंग में वर्णों की आवृत्ति एक स्ट्रिंग में होने की संख्या है। उदाहरण के लिए - String: Football is a sport The frequency of alphabet o in the above string is 3 किसी विशेष वर्ण की आवृत्ति ज्ञात करने का कार्यक्रम इ