316. Remove Duplicate Letters
Leetcode
題目
解答
var removeDuplicateLetters = function(s) {
const hash = {};
for(let i=0; i<s.length; i++) {
const val = s[i];
if(!hash[val]) hash[val] = 1;
else hash[val]++;
}
// default 先把結果字串第一個放 0 (因為 charcode 小於所有英文字母)
let res = '0';
const visited = {};
for(let i=0; i<s.length; i++) {
const val = s[i];
hash[val]--;
// 如果訪問過的話遍歷下一個字母
if(visited[val]) continue;
let last = res[res.length-1];
// 只要目前字母大於 res 最後一個字母,且 hash table 裡還有最後一個字母
while(val<last && hash[last]) {
// 去掉最後一個字母
res = res.substring(0, res.length-1);
visited[last] = false;
last = res[res.length-1];
}
res += val;
visited[val] = true;
}
// 把 0 去掉
return res.substring(1);
};測資
參考資料
Last updated