एक स्ट्रिंग 'एस' को देखते हुए, कार्य पहले अद्वितीय चरित्र को ढूंढना है जो वर्णों की दी गई स्ट्रिंग में दोहरा नहीं रहा है और इसकी अनुक्रमणिका को आउटपुट के रूप में वापस कर देता है। यदि दिए गए स्ट्रिंग में ऐसे कोई वर्ण मौजूद नहीं हैं, तो हम '-1' को आउटपुट के रूप में वापस कर देंगे। उदाहरण के लिए,
इनपुट-1 -
s = “tutorialspoint”
आउटपुट -
1
स्पष्टीकरण - दिए गए स्ट्रिंग "ट्यूटोरियल पॉइंट" में, पहला अनूठा चरित्र जो दोहरा नहीं रहा है वह 'यू' है जिसका सूचकांक '1' है। इस प्रकार हम '1' को आउटपुट के रूप में वापस कर देंगे।
इनपुट-2 -
s = “aaasttarrs”
आउटपुट -
-1
स्पष्टीकरण - दिए गए स्ट्रिंग "आस्तर" में, कोई अद्वितीय वर्ण नहीं हैं। इसलिए, हम आउटपुट को '-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'){ mp[str[i]]++; } for(int i=0;i<s.size();i++){ for(auto it= mp.begin();it!=mp.end();it++){ if(it->first==str[i] && it->second==1){ ans= i; } } } return ans; } int main(){ string s= "tutorialspoint"; cout<<uniqueChar(s)<<endl; return 0; }
आउटपुट
उपरोक्त कोड को चलाने से आउटपुट इस प्रकार प्रिंट होगा,
1
स्पष्टीकरण - इनपुट स्ट्रिंग 'ट्यूटोरियल पॉइंट' में 'यू', 'आर', और 'एल' के रूप में अद्वितीय वर्ण होते हैं, और पहले अद्वितीय वर्ण 'यू' में इंडेक्स '1' होता है। तो, हमें आउटपुट के रूप में '1' मिलता है।