前端算法-删除字符串中的所有相邻重复项

简介: 前端算法-删除字符串中的所有相邻重复项

题目

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们,在 S 上反复执行重复项删除操作,直到无法继续删除,在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。

解析

根据题意我们这里肯定会使用到循环,所以这里先声明一个stack变量,它是一个空数组,也是我们所用的栈,然后再声明一个str变量,这个是用于存储我们最后的返回结果,然后我们使用循环,每次循环都会去删除数组中的最后一个字符,删除的字符用prve变量存储,然后再拿删除的字符和当前循环中的字符进行判断是否相等,如果不相等则把prve变量值和当前循环中的字符利用push方法添加到栈里面,如果相等则什么都不做进行下一次循环,第一次进入循环,stack变量数组为空,所以什么也不会删除,在进行比较的时候,第一个字符肯定是不相等的,所以第一个字符就入栈了,然后我们在进入第二次循环,第二次循环stack数组中是有值的,我们用prve变量存储删除的字符,在拿prve变量和当前循环中的字符进行比较,通过对比结果为不相等,所以进行入栈操作,然后进行第三次循环,第三次循环中将prve变量和当前循环中的字符进行对比,通过对比结果为相等所以我们什么操作都不做,以此往复,循环结束后,我们在利用join方法将stack变量变为字符串存储到str变量中,最后返回出去

/**
 * @param {string} s
 * @return {string}
 */
var removeDuplicates = function(s) {
let stack=[];
let str='';
for(v of s){
    let prve=stack.pop();
    if(prve!=v){
     stack.push(prve)
     stack.push(v)
    }
}
str=stack.join('');
return str;
};

坚持努力,无惧未来!

相关文章
|
18天前
|
前端开发 算法
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
|
20天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
16 1
|
9天前
|
算法
KPM算法求字符串的最小周期证明
公式 `ans = n - LPS[n-1]` 描述了最小周期,其中 `n` 是子串长度,`LPS[n-1]` 是前缀函数值。证明分为特殊情况和一般情况:对于完整周期字符串,`LPS[n-1] = 3*T`,故 `ans = T`;对于非完整周期,通过分析不同长度的 `[末部分]` 和 `[前部分]`,展示 `ans` 始终等于周期 `T` 或由 `[e][b]` 构成的最小周期,从而证明公式正确。
|
15天前
|
前端开发 JavaScript 流计算
前端 js 经典:字符串超全方法总结
前端 js 经典:字符串超全方法总结
25 0
|
19天前
|
缓存 算法 前端开发
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
|
20天前
|
算法 搜索推荐 程序员
第六十五练 字符串匹配 - Rabin-Karp算法
第六十五练 字符串匹配 - Rabin-Karp算法
20 1
|
20天前
|
算法 搜索推荐 程序员
第六十四练 字符串匹配 - Boyer-Moore算法
第六十四练 字符串匹配 - Boyer-Moore算法
22 0
|
20天前
|
算法 搜索推荐 程序员
第六十三练 字符串匹配 - KMP算法
第六十三练 字符串匹配 - KMP算法
18 2
|
20天前
|
算法 C语言 人工智能
|
20天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
14 1