Regular Expression Matching (Java)

来源:互联网 发布:java进度条代码 编辑:程序博客网 时间:2024/05/17 08:55

Implement regular expression matching with support for '.' and '*'.

'.' Matches any single character.'*' Matches zero or more of the preceding element.The matching should cover the entire input string (not partial).The function prototype should be:bool isMatch(const char *s, const char *p)Some examples:isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "a*") → trueisMatch("aa", ".*") → trueisMatch("ab", ".*") → trueisMatch("aab", "c*a*b") → true

尤其注意"ab"和".*"这种匹配,由于‘.'代表任何一个字符,对于'.'的‘*’扩充可以得到任意多个'.',所以ab和.*匹配。

Source

    public boolean isMatch(String s, String p) {        if(p.length() == 0){        if(s.length() == 0)        return true;        else return false;        }                if(p.length() == 1){        if(s.length() == 1 && (p.charAt(0) == s.charAt(0) || p.charAt(0) == '.'))        return true;        else return false;        }                if(p.charAt(1) != '*'){        if(s.length() != 0 && (s.charAt(0) == p.charAt(0) || p.charAt(0) == '.') && isMatch(s.substring(1), p.substring(1)))        //此处递归        return true;        else return false;        }        else{        while(s.length() != 0 && (s.charAt(0) == p.charAt(0) || p.charAt(0) == '.')){        if(isMatch(s, p.substring(2))) //***        return true;        s = s.substring(1);        }        return isMatch(s, p.substring(2));        }    }


Test

    public static void main(String[] args){    String s = "ab";    String p = ".*";    System.out.println(new Solution().isMatch(s, p));    }





0 0
原创粉丝点击