题解 | #去除重复字母#

去除重复字母

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
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务