Leetcode 10 正则表达式匹配*

学习了大佬的博客:https://www.cnblogs.com/willaty/p/8134672.html

给定字符串 s  和 匹配模式 p  下文中的“~”表示匹配

bool dp[i][j] —— s的0~i个字符与p的0~j个字符是否匹配

(1)p中不存在 * ->按位匹配即可

(2)p中有*

   s中的子串[0,i]都可以表示为 s1=Sx    其中S为前i-1位构成的字符串  x为第i位

   p中的子串[0,j]都可以表示为p1=Pya  其中P为前j-2位构成的字符串  y为第j-1位 a为第j位

   计算 dp[i][j]  即匹配s1和p1

    ①x=a  这时,若S~Py,则s1~p1   即dp[i][j]=dp[i-1][j-1]

    ②x!=a  ①a!=*  dp[i][j]=0

         ②a=*  ①x!=y  若Sx~P 则s1~p1  即dp[i][j]=dp[i][j-2]

             ②x=y  若S~P 或 Sx~P 或 S~Py 或Sx~Py或S~Pya 则s1~p1

                即dp[i][j]=dp[i-1][j-2]||dp[i][j-2]||dp[i-1][j-1]||dp[i][j-1]||dp[i-1][j]

猜你喜欢

转载自www.cnblogs.com/suuusu/p/10983713.html
今日推荐