題目概要

給定一個字串s,返回該字串中第一個沒有重複的字元它的位置(index) ,若是沒有則返回-1

  • 舉例:
    • "leetcode" : 返回0,(字母l是第一個沒有重複的字元)
    • "loveleetcode" : 返回2,(字母v是第一個沒有重複的字元)
    • "aabb" : 返回-1,(沒有任何一個字元是沒有重複的)

解題思路

  • 利用函數unordered_map建立一個無序容器
  • 接著每個新被for迴圈跑到的字母,都會在容器中新增一個key並將其value加1
  • 最後確認每個key的value,第一個出現value==1的key將會被回傳它的位置

參考程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int firstUniqChar(string s) {
unordered_map<char,int> table;
// 把s的字母寫進table中
for(int i=0;i<s.length();i++)
table[s[i]]++;
// 確認每個table中的key的value,如果value==1,則回傳其位置
for(int j=0;j<s.length();j++) {
if(table[s[j]]==1)
return j;
}
// 如果都沒有出現value==1,則回傳-1
return -1;
}
};