LeetCode 44. 通配符匹配(dp)

    科技2026-03-18  6

    题意:

    给定一个字符串 (t) 和一个字符模式 (s) ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。

    ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。

    给定串t和s,问是否能够匹配。

    code:

    class Solution { public: bool isMatch(string t, string s) { int len1=s.size(),len2=t.size(); vector<vector<int> >d(len1+5,vector<int>(len2+5,0));//动态开辟内存 d[0][0]=1; for(int i=1;i<=len1;i++){ if(s[i-1]=='*')d[i][0]=1; else break; } for(int i=1;i<=len1;i++){ for(int j=1;j<=len2;j++){ if(s[i-1]==t[j-1]||s[i-1]=='?'||s[i-1]=='*'){ d[i][j]|=d[i-1][j-1]; } if(s[i-1]=='*'){ d[i][j]|=d[i][j-1]; d[i][j]|=d[i-1][j]; } } } return d[len1][len2]; return 0; } }; /* dp[i][j]=0/1表示s串前i个字符和t串前j个字符是否能够匹配, 1.s[i-1]==t[j-1]||t[j-1]=='?'||t[j-1]=='*',那么d[i][j]|=d[i-1][j-1]; 2.s[i-1]=='*',那么d[i][j]|=d[i-1][j],且d[i][j]|=d[i][j-1]; 特殊样例: "ho" "**ho" 解决: 当s串开头为'*'时,设当前'*'为s[i],那么需要令d[i][0]=1. */
    Processed: 0.015, SQL: 10