字串中的第一個唯一字元(First Unique Character in a String)

虛擬碼

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

題目說明

給定一個字串,找到其中的第一個非重複字元並返回其索引。如果不存在,則傳回 。s-1

解法

第一種
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
};

第二種 [失敗範例]

/**
* @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 循環更為簡潔,也更容易讀懂。