题目
https://www.nowcoder.com/questionTerminal/45327ae22b7b413ea21df13ee7d6429c
题意
请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”abaca”匹配,但是与”aa.a”和”ab*a”均不匹配
题解
假设dp[i][j]=true表示 s[0..i-1] 匹配 p[0..j-1]
则有两种情况,
- 如果p[j-1]!=’*’
- 如果s[i-1]与p[j-1]匹配并且dp[i-1][j-1]为true,那么dp[i][j]为true
- 如果p[j-1]==’*’,假设p[j-2]=X
- X* 匹配0次的情况,如果dp[i][j-2]为true,dp[i][j]为true
- 如果匹配超过0次,如果dp[i-1][j]为true,也就是最后一位前面的位匹配,并且最后一位匹配,那么dp[i][j]为true。
1 | class Solution { |