题目
由于只包含字符的字符串'('
,')'
,'{'
,'}'
,'['
和']'
,确定输入字符串是有效的。
括号必须关闭以正确的顺序,"()"
并且"()[]{}"
都是有效的,但"(]"
并"([)]"
没有。
这个写着easy的题 却感觉很难 看了一位答主的 讨论 才感觉有点思路 在这里 顺下思绪
var isValid = function(s) { var valid = true, pair = { '(': ')', '[': ']', '{': '}' }, nowWaitingFor = []; for (var i = 0; i < s.length; i++) { var nowChar = s.charAt(i); if (nowChar.match(/[(\[\{]/)) { // "/[(\[\{]/" 正则匹配规则 匹配 nowchar = [ ( { 中的一个 nowWaitingFor.unshift(pair[nowChar]); //unshift() 向数组的开头添加一个或更多元素 pair[nowChar] 即是对应的] ) } } else if (nowChar.match(/[)\]\}]/)) { // "/[(\[\{]/" 正则匹配规则 匹配 nowchar = ) [ } 中的一个 if (nowWaitingFor[0] !== nowChar) { // 如果nowChar 不等于noWaitingFor中的第一个元素 返回false 按照匹配规则
每一个( 对应) 同理其他两个 valid = false; break; } else { nowWaitingFor.splice(0, 1); 如果相同 把0位的字符切掉 因为已经有个相匹配的 去除不影响以后操作 } } } if (nowWaitingFor.length !== 0) { // 最后 nowWaitingFor 的长度必然是 0 valid = false; } return valid; }