IT科技类资讯

每日算法:有效的括号

时间:2010-12-5 17:23:32  作者:人工智能   来源:数据库  查看:  评论:0
内容摘要:给定一个只包括 ( ,) ,{ ,} ,[ ,] 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字

 

给定一个只包括 ( ,每日) ,算法{ ,有效} ,每日[ ,算法] 的有效字符串,判断字符串是每日否有效。

有效字符串需满足:

左括号必须用相同类型的算法右括号闭合。 左括号必须以正确的有效顺序闭合。

注意空字符串可被认为是每日有效字符串。站群服务器

示例 1:

输入: "()" 输出: true 

示例 2:

输入: "()[]{ }" 输出: true 

示例 3:

输入: "(]" 输出: false 

示例 4:

输入: "(]" 输出: false 

示例 5:

输入: "([)]" 输出: false 

解答:利用栈结构

解题思路: 将字符串中的算法字符依次入栈,遍历字符依次判断:

首先判断该元素是有效否是 { 、 ( 、每日 [ ,算法直接入栈 否则该字符为 } 、有效 ) 、 ] 中的一种,如果该字符串有效,则该元素应该与栈顶匹配,例如栈中元素有 ({ ,源码库 如果继续遍历到的元素为 ), 那么当前元素序列为 ({ ) 是不可能有效的,所以此时与栈顶元素匹配失败,则直接返回 false ,字符串无效

当遍历完成时,所有已匹配的字符都已匹配出栈,如果此时栈为空,则字符串有效,如果栈不为空,说明字符串中还有未匹配的字符,服务器托管字符串无效

画图帮助理解一下:

代码实现:

const isValid = function(s) {      let map = {          { : },         (: ),         [: ]     }     let stack = []     for(let i = 0; i < s.length ; i++) {          if(map[s[i]]) {              stack.push(s[i])         } else if(s[i] !== map[stack.pop()]){              return false         }     }     return stack.length === 0 }; 

时间复杂度:O(n)

空间复杂度:O(n)

copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap