您现在的位置是:亿华云 > 系统运维
每日算法:有效的括号
亿华云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)