LeetCode正则表达式-Regular Expression Matching

来源:互联网 发布:关于程序员的搞笑段子 编辑:程序博客网 时间:2024/05/22 10:48

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
public boolean isMatch(String s, String p) {if(p.length()==0||p==null){return s==null||s.length()==0;}if(s==null){return false;}if(s.length()==0){if(p.length()%2==1)return false;else{for(int i=0;i<p.length();i++){if(i%2==1&&p.charAt(i)!='*'){return false;}}return true;}}if(p.length() == 1){if(s.length()>1){return false;}if(p.charAt(0) == s.charAt(0)||p.charAt(0)=='.'){return true;}return false;}else{if(p.charAt(1)=='*'){while(s.length()!=0&&(p.charAt(0)==s.charAt(0)||p.charAt(0)=='.')){if(isMatch(s,p.substring(2))){return true;}s = s.substring(1);}return isMatch(s,p.substring(2));}else{if(p.charAt(0)==s.charAt(0)||p.charAt(0)=='.'){return isMatch(s.substring(1),p.substring(1));}return false;}}}

基本思想就是:回溯法,对于'*'和它之前的字符t(可以是任意字符)组成的元组,s中的t可以使用p中的t*来匹配,也可以不使用,如果不使用,就isMatch(s,p.substring(2))利用p后面的来匹配t,如果后面的不能匹配,就将s=s.substring(1),这句话就相当于使用了t*来匹配t,然后继续判断是否进入while循环
原创粉丝点击