括号匹配是一种数据结构问题,用于检查给定的字符串中的括号是否匹配。例如,对于字符串 "((())())",括号是匹配的,而对于字符串 "())(",括号是不匹配的。
常见的解决括号匹配问题的数据结构是栈。当遇到左括号时,将其推入栈中;当遇到右括号时,从栈中弹出一个左括号进行比较。如果弹出的左括号与右括号不匹配,或者遍历完字符串后栈不为空,那么括号就不匹配。
以下是一个简单的括号匹配算法的伪代码:
function isBracketMatch(str):stack = empty stackfor char in str:if char is '(' or char is '[' or char is '{':stack.push(char)else if char is ')' or char is ']' or char is '}':if stack.isEmpty() or (char is ')' and stack.top() is not '(') or (char is ']' and stack.top() is not '[') or (char is '}' and stack.top() is not '{'):return falseelse:stack.pop()return stack.isEmpty()
上述算法首先创建一个空栈,然后依次扫描字符。如果字符是左括号,则将其推入栈中;如果字符是右括号,则从栈中弹出一个左括号进行比较。如果弹出的左括号与右括号不匹配,或者遍历完字符串后栈不为空,那么括号就不匹配。最后,如果栈为空,则括号匹配。
这个算法的时间复杂度是O(n),其中n是字符串的长度。