ให้สตริง 's' ภารกิจคือการค้นหาอักขระที่ไม่ซ้ำกันตัวแรกซึ่งไม่ซ้ำกันในสตริงของอักขระที่กำหนดและส่งคืนดัชนีเป็นเอาต์พุต หากไม่มีอักขระดังกล่าวอยู่ในสตริงที่กำหนด เราจะคืนค่า '-1' เป็นเอาต์พุต ตัวอย่างเช่น
อินพุต-1 −
s = “tutorialspoint”
ผลผลิต −
1
คำอธิบาย − ในสตริงที่กำหนด "tutorialspoint" อักขระพิเศษตัวแรกที่ไม่ซ้ำกันคือ 'u' ซึ่งมีดัชนี '1' ดังนั้นเราจะคืนค่า '1' เป็นเอาต์พุต
อินพุต-2 −
s = “aaasttarrs”
ผลผลิต −
-1
คำอธิบาย − ในสตริงที่กำหนด “aaasttarrs” ไม่มีอักขระเฉพาะ ดังนั้น เราจะคืนค่าผลลัพธ์เป็น '-1'
แนวทางที่ใช้ในการแก้ปัญหานี้
ในการค้นหาดัชนีของอักขระที่ไม่ซ้ำตัวแรกในสตริงที่กำหนด เราสามารถใช้ hashmap . แนวคิดคือต้องอ่านอักขระทั้งหมดของสตริง และสร้าง hashmap โดยคีย์เป็นอักขระและค่าตามที่เกิดขึ้น
ขณะสำรวจผ่านอักขระแต่ละตัวของสตริง เราจะจัดเก็บข้อมูลการปรากฏของอักขระแต่ละตัวหากปรากฏ จะใช้เวลาเชิงเส้น O(n) ในการจัดเก็บการเกิดขึ้นของอักขระแต่ละตัว จากนั้นเราจะเข้าสู่ hashmap และจะตรวจสอบว่ามีอักขระตัวใดที่มีความถี่น้อยกว่า 2 หรือเท่ากับ '1' และเราจะคืนค่าดัชนีของอักขระนั้น ๆ
-
รับสตริง 's' เป็นอินพุต
-
ฟังก์ชัน Integer uniqueChar(string str) รับสตริงเป็นอินพุตและส่งกลับดัชนีของอักขระที่ไม่ซ้ำตัวแรกที่ปรากฏขึ้น
-
วนซ้ำบนสตริงและสร้าง hashmap ของ char และการเกิดขึ้นในขณะที่อ่านอักขระแต่ละตัวของสตริง
-
หากมีอักขระที่มีความถี่น้อยกว่า 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
คำอธิบาย − สตริงอินพุต 'tutorialspoint' มีอักขระเฉพาะเช่น 'u', 'r' และ 'l' และอักขระเฉพาะตัวแรก 'u' มีดัชนี '1' ดังนั้นเราจึงได้ '1' เป็นผลลัพธ์