linye's Blog

全端工程師心得分享

0%

[LeetCode]387. First Unique Character in a String

Data Structure I 筆記撰寫計畫

敘述

這是 Data Structure I 的第六天第一個題目,總共有三題。

  • 難度: Easy
  • 花費時間: 1小時
  • 題目

給你一個字串,找到裡面第一個沒有重複的字並且回傳他的 index ,如果不存在,那就回傳 -1

點我開啟限制與範例

限制:

  • 1 <= s.length <= 105
  • s consists of only lowercase English letters.

Example 1:

1
2
Input: s = "leetcode"
Output: 0

Example 2:

1
2
Input: s = "loveleetcode"
Output: 2

Example 3:

1
2
Input: s = "aabb"
Output: -1

筆記

解題思路是遍歷一次陣列把所有的子字符跟他的 index 都放在 Object 裡做比較,應該有更好的做法。

建立一個 Object 存放如下資料:

1
2
3
{
字串內的每個子字符:子字符的 index
}

寫一個迴圈遍歷字串:

  1. 每遇到一個文字就放入 Object
  2. 比較當前 index 跟 String.prototype.indexOf()
    • 如果不一樣: Object 裡的值就改成 -1
    • 如果一樣: 不做事
      迴圈結束
  • 如果 Object 裡還有資料: 回傳他的 index
  • 如果沒有: 回傳 -1

程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @param {string} s
* @return {number}
*/
var firstUniqChar = function (s) {
let compareObj = {};
for (let i = 0; i < s.length; i++) {
if (compareObj[s[i]] != undefined && compareObj[s[i]] != i) {
compareObj[s[i]] = -1;
} else {
compareObj[s[i]] = i;
}

// console.log('i: ' + i ,compareObj)
}
for (let i in compareObj) {
if (compareObj[i] != -1) return compareObj[i];
}
return -1;

};

成績