/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @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
};