[1249] 移除无效的括号(27)

107 阅读1分钟

这道题,我开始想了一会儿,只想到用一个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) 这种写法消耗的比较大

image.png

image.png