关于javascript:20-20-有效的括号LeetCodeC语言及JS实现

问题形容:

给定一个只包含 ‘(‘,’)’,'{‘,’}’,'[‘,’]’ 的字符串 s ,判断字符串是否无效。
无效字符串需满足:
左括号必须用雷同类型的右括号闭合。
左括号必须以正确的程序闭合。

思路:

遍历字符串,将左括号入栈,遇到右括号就将栈顶元素出栈,比拟栈顶元素与相应的右括号对应的左括号是否雷同,雷同则将栈顶元素出栈,而后持续循环,当stack为空时,也间接返回false。不雷同则示意不匹配,返回false。

将右括号作为hash表的键,相应的左括号作为值,存储在map中。

一、JS解法

/**
 * @param {string} s
 * @return {boolean}
 */
const isValid = function (s) {
  if (s.length % 2 !== 0) {
    return false
  }
  let map = new Map([
    [')', '('],
    ['}', '{'],
    [']', '[']
  ])
  const stack = []
  const len = s.length
  for (let i = 0; i < len; i++) {
    // 如果字符在map中存在,即作为map的键存在,则阐明遍历到的是右括号
    // 此时,须要判断其前一个元素(即栈顶的元素)是否是对应的左括号
    // 是则将栈顶元素出栈,否则则返回false,即不匹配
    if (map.has(s[i])) {
      if (!stack.length || stack[stack.length - 1] !== map.get(s[i])) {
        return false
      } else {
        stack.pop()
      }
    } else { // 如果字符不在map中存在,这阐明是左括号,将其入栈即可
      stack.push(s[i])
    }
  }
  return !stack.length
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理