您现在的位置是:亿华云 > 系统运维

每日算法:有效的括号

亿华云2025-10-02 08:58:40【系统运维】6人已围观

简介给定一个只包括 ( ,) ,{ ,} ,[ ,] 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字

 

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

有效字符串需满足:

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

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

示例 1:

输入: "()" 输出: true 

示例 2:

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

示例 3:

输入: "(]" 输出: false 

示例 4:

输入: "(]" 输出: false 

示例 5:

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

解答:利用栈结构

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

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

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

画图帮助理解一下:

代码实现:

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)

很赞哦!(481)