leetcode10 为什么p[j-1] == '*'的时候,不能用递推公式dp[i][j] = dp[i][j-1] || dp[i][j-2] || dp[i-1][j]

因为可能会出现以下情况:

"mississippi"
"mis*is*p*."

mississ

mis*is*

符合

mississi

mis*is* 

符合

所以,递推公式是

int dp[slen+1][plen+1]
if (p[j-1] == '.' || s[i-1] == p[j-1]) dp[i][j] = dp[i-1][j-1];
if (p[j-1] == '*')
{
    dp[i][j] = dp[i][j-1] || dp[i][j-2];
    if (p[j-2] == '.' || s[i-1] == p[j-2]) dp[i][j] = dp[i][j] || dp[i-1][j];
}

相比较而言,44题就是真正的起飞了

 

你可能感兴趣的:(leetcode10 为什么p[j-1] == '*'的时候,不能用递推公式dp[i][j] = dp[i][j-1] || dp[i][j-2] || dp[i-1][j])