题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
leetcode地址
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例
输入: s='{}'返回: true输入: s='{([])}'返回: true输入: s='([)]'返回: false
解题思路
这是一道很典型的用 栈 解决的问题,根据题意,我们可以左括号必须用相同类型的右括号才能闭合,那么我们就可以把所有 左括号 直接放入栈中,遍历右括号时判断是否跟 栈顶元素 (栈的最后一个元素)相匹配,不匹配就返回false,也就是非有效字符串,匹配的话就直接把栈顶元素抛出 pop(),最后若 栈为空 则字符串有效
参考代码
const str = '({})'
const str1='([}])'
const match = (s: string) => {
const map = { '{': '}', '[': ']', '(': ')' }
const arr = []
for (let i of s) {
if (map[i]) { // 如果是左括号则直接放入栈中
arr.push(i)
} else { // 如果是右括号要和栈顶元素相匹配
if (map[arr[arr.length - 1]] === i) {
arr.pop()
} else {
return false
}
}
}
return arr.length === 0
}
const answer = match(str)
const answer1 = match(str1)
console.log('answer', answer); // true
console.log('answer1', answer1); // false
结束语
欢乐的做题时光总是如此短暂,有更好的方法可以评论区分享,下次再见!