【劍指Offer 50】js 第一個只出現一次的字元 兩種解法
阿新 • • 發佈:2021-01-25
技術標籤:資料結構與演算法字串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
使用js
的array
提供的indexOf
和lastIndexOf
方法
遍歷字串,比較每個字元第一次和最後一次出現的位置是否相同。
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 " ";
};