消除连续的字符串JavaScript
题目描述:
输入一个数组或字符串,相邻相同的字符串消除,输出剩下的数组段或字符串,注意消除相邻的字符串后相邻位置可能产生新的相同字符串。(类似于开心消消乐,不过两个就可以开始消除)
示例:
输入[1, 2, 3, 4, 4, 4, 3, 1, 2],输出为[1, 2, 1, 2]。即先消除三个4,然后两个3相邻,再消除两个3。输出为[1, 2, 1, 2]。
可能踩的坑
- 遇到相邻相同的数字和字符直接消除,可能导致奇数个连续数不能全部消除;
- 注意再消除部分字符和数字时可能会产生新的相邻字符和数字;
*解题思路
- 新建一个数组,用以存放元素,并将原数组的第一位放入新数组的第一位;
- 循环遍历原数组,注意此处移位操作放在for循环里面(避免指针移动情况与期望的不一致);
- 依次判断原数组和新数组最后一位,如果不相同,将该字符放入新数组;如果相同,指针后移,直至遇到不相同的元素退出while循环,同时删除新数组的最后一个字符;
- 继续重复该判断,i++放在for循环里面就是为了让上一次判断结束之后直接进行下一次判断,指针不进行移位,否则将不能完整遍历整个原数组。
- 返回新数组。
消除重复字符——代码
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;
}
欢迎一起探讨和寻求更好的解题方法。