题解 | #去除重复字母#
去除重复字母
https://www.nowcoder.com/practice/67bf02ee92304e1f822d12742cec0725
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return string字符串 */ function removeDuplicateLetters( str ) { // write code here let stack = []; let l = 0; // 计算数组中的字符,在l后面的串中是否存在,存在并且比数组中最后一项大的话,就可以丢弃了 function calc(ms) { if (!ms) return; for(let i = stack.length - 2; i > -1; i--) { // 如果数组中的倒数第二位数,比最后一个大,并且后面的字符串中也存在,则抽出来; if (stack[i] > stack[stack.length -1] && ms.indexOf(stack[i]) > -1) { stack.splice(i, 1); } else { break; } } } while(l < str.length) { let ms = str.slice(l + 1); if (ms.indexOf(str[l]) < 0 && stack.indexOf(str[l]) < 0){ stack.push(str[l]); calc(ms); } else { // 重复字符索引 let dupIndex = stack.indexOf(str[l]); if (dupIndex < 0){ stack.push(str[l]); calc(ms); l++; continue; } if (str[l] == stack[stack.length - 1]) { l++; continue; }; if (stack[dupIndex] > stack[dupIndex+1]) { stack.splice(dupIndex, 1); stack.push(str[l]); } } l++; } return stack.join(''); } module.exports = { removeDuplicateLetters : removeDuplicateLetters };