leecode 10 Regular Expression Matching

来源:互联网 发布:护士幻灯片制作软件 编辑:程序博客网 时间:2024/05/22 09:14
class Solution {public:    bool isMatch(string s, string p) {        int ls = s.length();        int lp = p.length();        bool mark[ls+1][lp+1];        memset(mark,0,sizeof(mark));         mark[0][0] = 1;        for(int i = 1; i < lp && p[i] == '*'; i+=2){            mark[0][i+1] = 1;        }        for(int i = 1; i <= ls; ++i){            for(int j = 1; j <= lp; ++j){                if(p[j-1] == '.' || p[j-1] == s[i -1])                    mark[i][j] = mark[i-1][j-1];                else if(j > 1 && p[j-1] == '*')                    mark[i][j] = mark[i][j-2] || (mark[i-1][j] && (p[j-2] == '.' || s[i-1] == p[j-2]));   // .*            }        }        return mark[ls][lp];    }};



public boolean isMatch(String s, String p) {
    boolean[] match = new boolean[s.length()+1];
    Arrays.fill(match, false);
    match[s.length()] = true;
    for(int i=p.length()-1;i>=0;i--){
        if(p.charAt(i)=='*'){
            for(int j=s.length()-1;j>=0;j--)    match[j] = match[j]||match[j+1]&&(p.charAt(i-1)=='.'||s.charAt(j)==p.charAt(i-1));
            i--;
        }
        else{
            for(int j=0;j<s.length();j++)   match[j] = match[j+1]&&(p.charAt(i)=='.'||p.charAt(i)==s.charAt(j));
            match[s.length()] = false;
        }
    }
    return match[0];
}

0 0
原创粉丝点击