美文网首页LintCode解题思路
lintcode-通配符匹配

lintcode-通配符匹配

作者: 鬼谷神奇 | 来源:发表于2016-05-31 15:19 被阅读150次

时间复杂度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];
}
};

相关文章

  • lintcode-通配符匹配

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

  • 物联网核心协议MQTT快速入门4 通配符与QOS

    通配符 "+" 单层通配符,可以匹配特定主题层的任何名称 "#" 多层通配符,可以匹配任何特定主题级别的名称。 例...

  • 一些不懂需要注意的地方

    通配符 ? 操作实例通配符 ? 每次匹配一个字符与通配符 【*】 不同,【?】每次只匹配一个字符,例如上图,匹配/...

  • 通配符匹配

    给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 '?' 可以匹...

  • 三、SQL—数据检索②(通配符)

    通配符过滤:like(模糊查询) 单字符匹配:通配符为半角下划线“_”,它匹配单个出现的字符如通配符表达式“b_d...

  • Linux学习-Shell编程-正则表达式与通配符

    正则: 匹配文件中字符串 ,正则是包含匹配通配符: 匹配文件名,通配符是完全匹配image.png 前一个字符...

  • 通配符的使用

    通配符的使用---------------------------------------------* 匹配任意...

  • Glob匹配模式

    在Linux中,glob是用来匹配路径名的通配符,主要包含以下四种: 通配符(Wild Matching) *匹配...

  • 整理正则表达式

    ? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符 例子:/?a/ 可以匹配字符串...

  • 命令行的通配符

    [TOC] 命令行的通配符 通配符就是通用的匹配信息符号 *:代表匹配零个或多个字符 ?:代表匹配单个字符 [0-...

网友评论

    本文标题:lintcode-通配符匹配

    本文链接:https://www.haomeiwen.com/subject/ynbqdttx.html