有效的括号 - LeetCode 阅读
https://leetcode-cn.com/articles/valid-parentheses/
给定一个只包括 ‘(‘
,‘)‘
,‘{‘
,‘}‘
,‘[‘
,‘]‘
的字符串,判断字符串是否有效。
有效字符串需满足:
注意空字符串可被认为是有效字符串。
让我们看看使用栈作为该问题的中间数据结构的算法。
算法
相同类型的
左括号,那么我们将它从栈中弹出并继续处理。否则,这意味着表达式无效。
class Solution {
// Hash table that takes care of the mappings.
private HashMap<Character, Character> mappings;
// Initialize hash map with mappings. This simply makes the code easier to read.
public Solution() {
this.mappings = new HashMap<Character, Character>();
this.mappings.put(‘)‘, ‘(‘);
this.mappings.put(‘}‘, ‘{‘);
this.mappings.put(‘]‘, ‘[‘);
}
public boolean isValid(String s) {
// Initialize a stack to be used in the algorithm.
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
// If the current character is a closing bracket.
if (this.mappings.containsKey(c)) {
// Get the top element of the stack. If the stack is empty, set a dummy value of ‘#‘
char topElement = stack.empty() ? ‘#‘ : stack.pop();
// If the mapping for this bracket doesn‘t match the stack‘s top element, return false.
if (topElement != this.mappings.get(c)) {
return false;
}
} else {
// If it was an opening bracket, push to the stack.
stack.push(c);
}
}
// If the stack still contains elements, then it is an invalid expression.
return stack.isEmpty();
}
}
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
# The stack to keep track of opening brackets.
stack = []
# Hash map for keeping track of mappings. This keeps the code very clean.
# Also makes adding more types of parenthesis easier
mapping = {")": "(", "}": "{", "]": "["}
# For every bracket in the expression.
for char in s:
# If the character is an closing bracket
if char in mapping:
# Pop the topmost element from the stack, if it is non empty
# Otherwise assign a dummy value of ‘#‘ to the top_element variable
top_element = stack.pop() if stack else ‘#‘
# The mapping for the opening bracket in our hash and the top
# element of the stack don‘t match, return False
if mapping[char] != top_element:
return False
else:
# We have an opening bracket, simply push it onto the stack.
stack.append(char)
# In the end, if the stack is empty, then we have a valid expression.
# The stack won‘t be empty for cases like ((()
return not stack
复杂度分析
((((((((((
。
原文:https://www.cnblogs.com/yuanjiangw/p/10798429.html