Regular Expression Matching

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") → false

isMatch("aa","aa") → true

isMatch("aaa","aa") → false

isMatch("aa", "a*") → true

isMatch("aa", ".*") → true

isMatch("ab", ".*") → true

isMatch("aab", "c*a*b") → true
这一题麻烦的地方在于回溯, 如果查到某个是*,则要往前退。
 1 public class Solution {

 2     public boolean isMatch(String s, String p) {

 3         // Start typing your Java solution below

 4         // DO NOT write main() function

 5         assert(p!=null && (p.length()==0 || p.charAt(0)!='*'));

 6         if(p.length()==0) return s.length()==0;

 7         if(p.length()==1 || p.charAt(1)!='*'){

 8             if(s.length()<1 || (p.charAt(0)!='.' && p.charAt(0)!=s.charAt(0))) return false;

 9             return isMatch(s.substring(1),p.substring(1));

10         }

11         else{

12             int i=-1;

13             while(i<s.length() && (i<0 || p.charAt(0)=='.' || p.charAt(0)==s.charAt(i))){

14                 if(isMatch(s.substring(i+1),p.substring(2))) return true;

15                 i++;

16             }

17             return false;

18         }

19     }

20 }

 

你可能感兴趣的:(Regular Expression Matching)