这道题,我开始想了一会儿,只想到用一个stack = []栈来记录元素 ,发现没办法进出判断,然后看了助教的视频,又看了看题解都是说用2个stack栈来记录元素下标,最后统一删除,对比我写之前的想法是可以实现的,还有就是第二步,刚开始我是在想最后怎么拼接字符串和数字,后来看了讲解才知道,记录要删除的下标
var minRemoveToMakeValid = function (s) {
// 第一步
const leftD = [], rightD = [], arrS = [...s]
for (let i in arrS) {
const item = arrS[i];
if (item === '(') {
leftD.push(i)
} else if (item === ')') {
if (leftD.length) {
leftD.pop()
} else {
rightD.push(i)
}
}
}
// 第二步
const arr = [...leftD, ...rightD];
for (const j of arr) {
arrS[j] = ''
}
return arrS.join('')
};
另外说个对比for循环之前,我好像看过一篇文章说for循环哪种写法最好,看下面俩个图至少知道for(const i in arr) 这种写法消耗的比较大