知識點:
1 將 a-z 字幕的 ascii 碼出現次數對映到 0-25 的陣列中 , 雜湊函式 f(char)=char-'a' O(1) , 鍵轉換為索引
2 26 個字幕和 1-30 學號這樣的雜湊函式很容易能找到一一對應的索引 , 但是身份證,字串,浮點數,日期卻不能 , 可能是多對一 , 因而產生雜湊衝突
3 雜湊表的設計思想: 空間換時間 , 假如1101819851216666 的身份證 , 可以開闢無限大的 99999999999999 的陣列,則可以用 O(1)的時間執行任意操作 , 假如只有 1 的空間, 則只能類似連結串列(線性表) , O(n)的時間操作
func firstUniqChar(s string) int {
/*
make a arr , map 0-25 as a-z
*/
arr:=[26]int{}
for _,v:=range s {
arr[v-'a']++
}
for k,v:=range s {
if arr[v-'a']==1 {
return k
}
}
return -1
}