动态规划
class Solution:def isMatch(self, s, p):s = ' ' + sp = ' ' + psize1 = len(p)size2 = len(s)dp = [[False] * size2 for _ in range(size1)]# p到i和s到j为止,是否匹配dp[0][0] = Truefor i in range(size1):for j in range(size2):if p[i] == '.':if p[i - 1] == '*' and dp[i - 3][j - 1]:dp[i][j] = Trueif dp[i - 1][j - 1] and s[j] != ' ':dp[i][j] = Trueelif p[i] == '*':strp = p[i - 1]if strp == '.':if dp[i - 2][j]:dp[i][j] = Trueif dp[i - 1][j]:for k in range(j, size2):dp[i][k] = Trueelse:if dp[i - 2][j]:dp[i][j] = Trueif dp[i - 1][j]:for k in range(j, size2):if s[k] == strp:dp[i][k] = Trueelse:breakelse:if p[i] == s[j] and p[i - 1] == '*' and dp[i - 3][j - 1]:dp[i][j] = Trueif p[i] == s[j] and dp[i - 1][j - 1]:dp[i][j] = True# for i in range(len(dp)):# print(dp[i])if dp[size1 - 1][size2 - 1]:return Truereturn Falsea = Solution()
print(a.isMatch("a", ".*..a*")) # F
# print(a.isMatch("aaabaaaababcbccbaab", "c*c*.*c*a*..*c*")) # T
# print(a.isMatch("a", "..*")) # T
# print(a.isMatch("b", "b*")) # T
# print(a.isMatch("a", "ab*")) # T
# print(a.isMatch("aab", "b.*")) # F
# print(a.isMatch("aaaaaaaaaaaaab", "a*a*a*a*a*a*a*a*a*c")) # F
# print(a.isMatch("mississippi", "mis*is*p*.")) # F
# print(a.isMatch('aab', 'c*a*b')) # T
# print(a.isMatch("aaa", "ab*a*c*a")) # T
# print(a.isMatch("ab", ".*c")) # F
# print(a.isMatch("mississippi", "mis*is*ip*.")) # T
(写的像一坨)
状态dp[i][j]表示字符串p到i为止、字符串s到j为止能否匹配