एक स्ट्रिंग 's' दी गई है, कार्य पहले अद्वितीय वर्ण को ढूंढना है जो दी गई वर्णों की स्ट्रिंग में दोहरा नहीं रहा है और उसके इंडेक्स को आउटपुट के रूप में लौटाएं। यदि दी गई स्ट्रिंग में ऐसा कोई वर्ण मौजूद नहीं है, तो हम आउटपुट के रूप में '-1' लौटाएंगे। उदाहरण के लिए,
इनपुट-1 -
s = "tutorialspoint"
आउटपुट -
1
व्याख्या - दी गई स्ट्रिंग "tutorialspoint" में, पहला अद्वितीय वर्ण जो दोहरा नहीं रहा है वह 'u' है जिसका इंडेक्स '1' है। इस प्रकार हम आउटपुट के रूप में '1' लौटाएंगे।
इनपुट-2 -
s = "aaasttarrs"
आउटपुट -
-1
व्याख्या - दी गई स्ट्रिंग "aaasttarrs" में, कोई अद्वितीय वर्ण नहीं हैं। इसलिए, हम आउटपुट के रूप में '-1' लौटाएंगे।
इस प्रॉब्लम को हल करने के लिए उपयोग किया गया दृष्टिकोण
दिए गए स्ट्रिंग में मौजूद पहले अद्वितीय वर्ण का इंडेक्स ढूंढने के लिए, हम हैशमैप का उपयोग कर सकते हैं। विचार स्ट्रिंग के सभी वर्णों से गुजरना और एक हैशमैप बनाना है जिसमें कुंजी वर्ण के रूप में और वैल्यू उसकी घटनाओं के रूप में हो।
स्ट्रिंग के प्रत्येक वर्ण से गुजरते समय, हम प्रत्येक वर्ण की घटनाओं को स्टोर करेंगे यदि यह प्रकट होता है। प्रत्येक वर्ण की घटनाओं को स्टोर करने में O(n) रैखिक समय लगेगा। फिर हम हैशमैप के माध्यम से जाएंगे और जांचेंगे कि क्या कोई वर्ण है जिसकी बारंबारता 2 से कम या '1' के बराबर है। और हम उस विशेष वर्ण का इंडेक्स लौटाएंगे।
एक स्ट्रिंग 's' को इनपुट के रूप में लें।
एक पूर्णांक फंक्शन uniqueChar(string str) एक स्ट्रिंग को इनपुट के रूप में लेता है और पहली बार आने वाले अद्वितीय वर्ण का इंडेक्स लौटाता है।
स्ट्रिंग पर पुनरावृति करें और स्ट्रिंग के प्रत्येक वर्ण से गुजरते हुए वर्ण और उसकी घटनाओं की एक हैशमैप बनाएं।
यदि कोई वर्ण है जिसकी बारंबारता 2 से कम या 1 के बराबर है, तो उस विशेष वर्ण का इंडेक्स लौटाएं।
यदि स्ट्रिंग में कोई अद्वितीय वर्ण मौजूद नहीं है, तो आउटपुट के रूप में '-1' लौटाएं।
उदाहरण
#include <bits/stdc++.h>
using namespace std;
int uniqueChar(string str) {
int ans = -1;
unordered_map<char, int> mp;
for (int i = 0; str[i] != '\0'; i++) {
mp[str[i]]++;
}
for (int i = 0; i < str.size(); i++) {
if (mp[str[i]] == 1) {
ans = i;
break;
}
}
return ans;
}
int main() {
string s = "tutorialspoint";
cout << uniqueChar(s) << endl;
return 0;
}
आउटपुट
उपरोक्त कोड चलाने पर निम्न आउटपुट प्रिंट होगा,
1
व्याख्या - इनपुट स्ट्रिंग 'tutorialspoint' में अद्वितीय वर्ण 'u', 'r', और 'l' हैं, और पहला अद्वितीय वर्ण 'u' का इंडेक्स '1' है। इसलिए, हमें आउटपुट के रूप में '1' मिलता है।