lintcode-通配符匹配

时间复杂度O(mn),dp[i][j] 代表字符串s的前i个字符和字符串p的前j个字符是否匹配,可以匹配两个字符串均包含通配符的情况

class Solution {
public:
    /**
     * @param s: A string 
     * @param p: A string includes "?" and "*"
     * @return: A boolean
     */
    bool isMatch(const char *s, const char *p) {
    // write your code here
    
    if(s == NULL && p == NULL){
        return true;
    }
    
    if(s == NULL || p == NULL){
        return false;
    }
        
    
    int sl = (int)strlen(s);
    int pl = (int)strlen(p);
    //bool dp[][] = new bool[sl+1][pl+1];
    bool dp[sl+1][pl+1];
    for(int i = 1; i <= sl; ++i){
        for(int j = 1; j <= pl; ++j){
            dp[i][j] = false;
        }
    }
    dp[0][0] = true;
    for(int i = 1; i <= sl; ++i){
        if(dp[i-1][0] == true && s[i-1] == '*'){
            dp[i][0] = true;
        }else{
            dp[i][0] = false;
        }
    }
    
    for(int i = 1; i <= pl; ++i){
        if(dp[0][i-1] == true && p[i-1] == '*'){
            dp[0][i] = true;
        }else{
            dp[0][i] = false;
        }
    }
    
    for(int i = 1; i <= sl; ++i){
        for(int j = 1; j <= pl; ++j){
            if(s[i-1] == '*' || p[j-1] == '*'){
                dp[i][j] = dp[i-1][j] || dp[i][j-1];
            }else if(s[i-1] == '?' || p[j-1] == '?'){
                dp[i][j] = dp[i-1][j-1];
            }else {
                dp[i][j] = ((s[i-1] == p[j-1] ? true : false) && dp[i-1][j-1]);
            }
            
        }
    }
    
   // cout << dp[sl-1][pl-1] << endl;
    
    return dp[sl][pl];
}
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 判断两个可能包含通配符“?”和“*”的字符串是否匹配。匹配规则如下: '?' 可以匹配任何单个字符。'*' 可以匹...
    六尺帐篷阅读 808评论 0 1
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,775评论 0 33
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,336评论 0 18
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,781评论 0 11
  • 东野圭吾 这本书其实看至接近于尾声时 我依旧不懂 杀死花冈靖子的前夫富樫慎二的那天晚...
    冬似旧山阅读 304评论 0 0