1, 题目
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"输出: true
示例 2:
输入: "()[]{}"输出: true
示例 3:
输入: "(]"输出: false
示例 4:
输入: "([)]"输出: false
示例 5:
输入: "{[]}"输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2, 算法
1, stack的典型应用
#python 实现class Solution:def isValid(self, s: str) -> bool:if not s:return Trued = {'(': 1,'[': 2,'{': 3,')': -1,']': -2,'}': -3}left = ['(', '[', '{']stack = []for c in s:if c in left:stack.append(c)else:if not stack:return Falseelse:x = stack.pop()if d[x] + d[c] != 0:return Falsereturn len(stack) == 0
#scala 实现
object Solution {
def isValid(s: String): Boolean = {
if (s.isEmpty) {
return true
}
val map = Map(
'(' -> 1,
')' -> -1,
'[' -> 2,
']' -> -2,
'{' -> 3,
'}' -> -3
)
val left = List('(', '[', '{')
val stack = scala.collection.mutable.ArrayStack[Char]()
for (c <- s) {
if (left.contains(c)) {
stack.push(c)
} else if (stack.isEmpty) {
return false
} else {
val x = stack.pop()
if (map(x) + map(c) != 0) {
return false
}
}
}
stack.isEmpty
}
}
