這一題是劍指offer裡面的題目,但是書本裡的解法自頂向下,不太好理解。
假設string長度為s,pattern長度為p,設定狀態dp,為 `dp[s+1][p+1]`
狀態含義:dp[i][j]表示pattern的1到j位是否匹配s的1---i位
初始狀態:
dp[0][0] = 1
dp[0][i] = p[i] == '*' && dp[0][i-1] 這裡匹配前面的*號
狀態轉移:
dp[i][j] =
當p[j]為*號的時候,可以不匹配*,也可以匹配*
匹配的時候,就是dp[i-1][j],不匹配的時候就是放過這個*號,也即是dp[i][j-1]
當p[j]為?或者p[j]==s[i]的時候,很簡單,直接匹配就可以了,dp[i][j] = dp[i-1][j-1]
最後返回最終狀態dp[s][p]
**如下.
class solution
for(int i=1; i<=ns; i++) else if(p[j - 1] == '*') }}
return dp[ns][np];
}};
DP萬用字元匹配
給定乙個字串 s 和乙個字元模式 p 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 輸入 s adceb p a b ...
leetcode 萬用字元匹配
給定乙個字串 s 和乙個字元模式 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例 1 輸入 s aa p a 輸出...
Leetcode之萬用字元匹配
給定乙個字串 s 和乙個字元模式 p 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例 1 輸入 s aa p a ...