F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

[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     }

 

[1] http://blog.csdn.net/tingmei/article/details/8049850

posted on 2015-08-13 14:27  F_G  阅读(143)  评论(0编辑  收藏  举报