สมมติว่าเรามีสตริงและเราต้องหาอักขระที่ไม่ซ้ำกันตัวแรกในสตริง ดังนั้นหากสตริงเป็นเหมือน "คน" อักษรตัวแรกที่เกิดขึ้นจะเป็นตัว "o" ดังนั้นดัชนีจะถูกส่งคืน นั่นคือ 2 ตรงนี้ หากไม่มีอักขระดังกล่าว ให้คืนค่า -1
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- สร้างแผนที่ความถี่เดียว
- สำหรับอักขระ c แต่ละตัวในสตริง ให้ทำ
- ถ้า c ไม่อยู่ในความถี่ ให้ใส่เข้าไปในความถี่ และใส่ค่า 1
- มิฉะนั้น ให้เพิ่มความถี่ในการนับ
- สแกนแผนที่ความถี่ หากค่าของคีย์เฉพาะคือ 1 ให้ส่งคืนคีย์นั้น มิฉะนั้นจะคืนค่า -1
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution(object): def firstUniqChar(self, s): """ :type s: str :rtype: int """ frequency = {} for i in s: if i not in frequency: frequency[i] = 1 else: frequency[i] +=1 for i in range(len(s)): if frequency[s[i]] == 1: return i return -1 ob1 = Solution() print(ob1.firstUniqChar("people")) print(ob1.firstUniqChar("abaabba"))
อินพุต
"people" "abaabba"
ผลลัพธ์
2 -1