您的位置:首页 > 其它

leecode 10 Regular Expression Matching

2015-04-27 18:01 281 查看
[code]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];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: