消除连续的字符串JavaScript

消除连续的字符串JavaScript

题目描述:

输入一个数组或字符串,相邻相同的字符串消除,输出剩下的数组段或字符串,注意消除相邻的字符串后相邻位置可能产生新的相同字符串。(类似于开心消消乐,不过两个就可以开始消除)

示例:

输入[1, 2, 3, 4, 4, 4, 3, 1, 2],输出为[1, 2, 1, 2]。即先消除三个4,然后两个3相邻,再消除两个3。输出为[1, 2, 1, 2]。

可能踩的坑

  1. 遇到相邻相同的数字和字符直接消除,可能导致奇数个连续数不能全部消除;
  2. 注意再消除部分字符和数字时可能会产生新的相邻字符和数字;

*解题思路

  1. 新建一个数组,用以存放元素,并将原数组的第一位放入新数组的第一位;
  2. 循环遍历原数组,注意此处移位操作放在for循环里面(避免指针移动情况与期望的不一致);
  3. 依次判断原数组和新数组最后一位,如果不相同,将该字符放入新数组;如果相同,指针后移,直至遇到不相同的元素退出while循环,同时删除新数组的最后一个字符;
  4. 继续重复该判断,i++放在for循环里面就是为了让上一次判断结束之后直接进行下一次判断,指针不进行移位,否则将不能完整遍历整个原数组。
  5. 返回新数组。

消除重复字符——代码

function del(arr) {
    var arrnew = [];
    arrnew[0] = arr[0];
    for (var i = 1; i < arr.length;) {
        if (arrnew[arrnew.length - 1] == arr[i]) {
            while (arrnew[arrnew.length - 1] == arr[i]) {
                i++;
            }
            arrnew.pop();
        } else {
            arrnew.push(arr[i]);
            i++;
        }
    } return arrnew;
}

欢迎一起探讨和寻求更好的解题方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值