1. 程式人生 > 其它 >【劍指Offer 50】js 第一個只出現一次的字元 兩種解法

【劍指Offer 50】js 第一個只出現一次的字元 兩種解法

技術標籤:資料結構與演算法字串leetcode演算法資料結構javascript

第一個只出現一次的字元

劍指Offer:第一個只出現一次的字元

題目

在字串 s 中找出第一個只出現一次的字元。如果沒有,返回一個單空格。 s 只包含小寫字母。

示例:

s = "abaccdeff"
返回 "b"

s = "" 
返回 " "

思路

解法1

用一個map儲存每個字元出現的字數

第一次迴圈儲存次數,第二次迴圈找到第一個出現一次的字元。

時間複雜度O(n)、空間複雜度O(n)

var firstUniqChar
= function (s) { if (!s) { return " "; } const countMap = {}; const arr = s.split(""); for (let i = 0; i < s.length; i++) { let current = arr[i]; let count = countMap[current]; countMap[current] = count ? count + 1 : 1; } for (let i = 0; i < s.
length; i++) { if (countMap[arr[i]] === 1) { return arr[i]; } } return " "; };

在這裡插入圖片描述

解法2

使用jsarray提供的indexOflastIndexOf方法

遍歷字串,比較每個字元第一次和最後一次出現的位置是否相同。

indexOf的時間複雜度為O(n),所以整體的時間複雜度為O(n2),空間複雜度為0

var firstUniqChar = function (s) {
  if (!s) {
    return " ";
  }
  for
(let i = 0; i < s.length; i++) { if (s.indexOf(s[i]) === s.lastIndexOf(s[i])) { return s[i]; } } return " "; };

在這裡插入圖片描述