ได้รับสตริง 's' งานคือหาตัวอักษรที่ไม่ซ้ำกันตัวแรกซึ่งไม่ได้ซ้ำในสตริงของตัวอักษรที่กำหนดและคืนค่าดัชนีของมันเป็นเอาต์พุต หากไม่มีตัวอักษรดังกล่าวในสตริงที่กำหนด เราจะคืนค่า '-1' เป็นเอาต์พุต ตัวอย่างเช่น
ตัวอย่างอินพุต 1
s = "tutorialspoint"
เอาต์พุต
1
คำอธิบาย
ในสตริงที่กำหนด "tutorialspoint" ตัวอักษรที่ไม่ซ้ำกันตัวแรกคือ 'u' ซึ่งมีดัชนี '1' ดังนั้นเราจะคืนค่า '1' เป็นเอาต์พุต
ตัวอย่างอินพุต 2
s = "aaasttarrs"
เอาต์พุต
-1
คำอธิบาย
ในสตริงที่กำหนด "aaasttarrs" ไม่มีตัวอักษรที่ไม่ซ้ำกัน ดังนั้นเราจะคืนค่าเอาต์พุตเป็น '-1'
วิธีการแก้ปัญหา
เพื่อหาดัชนีของตัวอักษรที่ไม่ซ้ำกันตัวแรกที่มีอยู่ในสตริงที่กำหนด เราสามารถใช้ hashmap แนวคิดคือผ่านตัวอักษรทั้งหมดของสตริงและสร้าง hashmap ด้วย Key เป็นตัวอักษรและ Value เป็นจำนวนครั้งที่เกิดขึ้น
ขณะวนลูปผ่านแต่ละตัวอักษรของสตริง เราจะเก็บจำนวนครั้งที่เกิดขึ้นของแต่ละตัวอักษรถ้ามันปรากฏ จะใช้เวลา 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'; 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' เป็นเอาต์พุต