10. Regular Expression Matching

来源:互联网 发布:奇点.com mac软件 编辑:程序博客网 时间:2024/03/28 23:21

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
表达式匹配问题:

*匹配一到多个连续字符   ‘.’匹配一个字符

在s只有一个字符时 p只要一个 * 不能匹配





分别讨论 长度为 0 1 >1的情况 

public class Solution {    public boolean isMatch(String s, String p) {        if(p==null||s==null)            return false;  //null和length==0的区别        if(p.length()==0)            return s.length()==0;        if(p.length()==1)   //如果p的长度是1 那么 比较第一位            return s.length()==1&&(p.charAt(0)=='.'||p.charAt(0)==s.charAt(0));        if(p.charAt(1)=='*')  //如果p的第二位 是 * 有两种可能  一种是*之前的都省略掉  比较*之后的内容和s是否匹配 第二种是略去s中的一个字符继续向后匹配            if(isMatch(s,p.substring(2)))                return true;            else return s.length()>0&&(p.charAt(0)=='.'||p.charAt(0)==s.charAt(0))&&isMatch(s.substring(1),p);        else     //如果p的第二位不是 * 一位一位的向后比较  并且将比较的字符串逐渐缩短            return s.length()>0&&(p.charAt(0)=='.'||s.charAt(0)==p.charAt(0))&&isMatch(s.substring(1),p.substring(1));    }}









0 0
原创粉丝点击