--- tags: Data Structure I, LeetCode disqus: HackMD --- # 字串中的第一個唯一字元(First Unique Character in a String) ## 虛擬碼 ```pseudocode= function bubble_sort (array, length) { var i, j; for(i from 0 to length-1){ let com_a = nums[i]; for(j from i+1 to length-1){ if (array[j] === com_a) true } } false } ``` ## 解題 [387. First Unique Character in a String](https://leetcode.com/problems/first-unique-character-in-a-string/description/?envType=study-plan&id=data-structure-i) ### 題目說明 給定一個字串,找到其中的第一個非重複字元並返回其索引。如果不存在,則傳回 。s-1  ### 解法 第一種 **Javascript** ```javascript= /** * @param {string} s * @return {number} */ const firstUniqChar = (s) => { const map = new Map() for(let letter of s) !map.has(letter) ? map.set(letter,1) : map.set(letter,-1) for (let item of map) if (item[1] === 1) return s.indexOf(item[0]) return -1 }; ``` 第二種 [失敗範例] ```javascript= /** * @param {string} s * @return {number} */ var firstUniqChar = function(s) { let no = 0; for (let i = 0; i < s.length; i ++) { for (let j = i+1; j < s.length; j ++) { let fir = ""; //第一個 let sec = ""; //下一個 fir = s[i]; sec = s[j]; if (fir !== sec) { no += 0; } else { no += 1; } console.log(i + fir + ',' + j + sec + ',' + no); } if (no == 0) { return i; } else { no += 0; } } return -1; }; ``` ### chatGPT解說 首先,這段程式碼使用了箭頭函式 (arrow function) 的語法,定義了一個名為 firstUniqChar 的函式,這個函式接收一個字串 s 作為參數。接下來,這個函式建立了一個空的 Map 物件,這個 Map 物件的目的是要存儲字串中每個字母出現的次數。 程式碼接下來使用了 for...of 的語法來迭代字串 s,對於字串中的每一個字母 letter,程式碼檢查 Map 物件中是否已經存在該字母,如果存在,就將其對應的值減一,表示這個字母出現了多次;如果不存在,就將其對應的值設定為 1,表示這個字母出現了一次。 接著,程式碼使用 for...of 的語法來迭代 Map 物件。對於 Map 物件中的每一個元素 item,進行判斷,如果這個元素的值等於 1,表示這個字母只出現了一次,那麼程式碼就回傳在原字串 s 中該字母的索引值,使用 indexOf 方法可以找到該字母在字串中第一次出現的位置。如果程式碼迭代完整個 Map 物件,仍然沒有找到只出現了一次的字母,那麼函式就回傳 -1,表示在原字串中沒有任何不重複的字母。 總結來說,這段程式碼使用 Map 物件來統計字串中每個字母出現的次數,然後再使用 Map 物件來找到第一個只出現一次的字母。程式碼中使用了 for...of 的語法來迭代字串和 Map 物件,這種語法相對於 for 循環更為簡潔,也更容易讀懂。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up