引言
括号问题是一类特殊的匹配问题,比较常见,常用的方法主要是dfs,dp,栈等方法,本文汇总这些题目进行分析。
例题
22.括号匹配
难度是M,首先需要思考明白,如何才能做到不重不漏的得到全部(有效)的括号组合。
第一个方法是dfs,首先我们明确如何得到有效的括号组合,要求的任何一个位置的右括号的数量都不能少于左侧括号。因此我们可以采用dfs的方法进行搜索。
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
ans = []
def gene(left, right,cur):
if right == 0:
ans.append(cur)
return
if left>0:
gene(left-1, right, cur+'(')
if right>left:
gene(left, right-1, cur+')')
return
gene(n, n, '')
return ans
这里因为是字符串的形式,所以不需要考虑深浅复制的问题。
另外一个方法是类似dp方法,定义dp[i]
是i个括号时的全部可能,新的括号产生只能是从"(" + s1 +")" + s2
转换得到的。
class Solution(object):
def generateParenthesis(self, n):
## dp的方法
dp = [[]for _ in range(n+1)]
dp[0] = ["