[Leetcode] Regular Expression Matching
这里只需要实现正则表达式当中的*和.
但是正则表达式包含的内容不止这些,现在这里简单总结一下。
1、a*:匹配零个或者多个a
2、.:匹配任意一个字符
3、a?:匹配零个或者一个a
4、a+:匹配一次或者多个a
5、开始^,结束$
6、范围[m,n],最多出现n次,最少出现m次
我们这里实现以下* and . and + and ?
实际上* + and ?的本质是一样的
1)*表示匹配的个数从
1 public boolean isRegular(String s,String p){ 2 if(s.compareTo("")==0) return p.compareTo("")==0; 3 if(p.length()==1||(p.charAt(1)!='*'&&p.charAt(1)!='+'&&p.charAt(1)!='?')){ 4 if(p.charAt(0)!='.'||(p.charAt(0)!=s.charAt(0))) return false; 5 return isRegular(s.substring(1),p.substring(1)); 6 }else{ 7 int limit=0; 8 int start=0; 9 char startc=p.charAt(1); 10 switch(startc){ 11 case '*': 12 limit=s.length();//等于limit的时候表示星号匹配所有的剩余字符 13 start=-1; 14 break; 15 case '!': 16 limit=s.length(); 17 start=0; 18 break; 19 case '?': 20 limit=2; 21 start=-1; 22 break; 23 } 24 for(int i=start;i<limit&&(i<0||s.charAt(i)==p.charAt(0));i++){//分别表示匹配的个数,有的是从0开始,有的是从1开始的 25 if(isRegular(s.substring(i+1),p.substring(2))) return true; 26 } 27 return false; 28 } 29 }