频道栏目
首页 > 资讯 > 其他 > 正文

正则表达式匹配

16-06-27        来源:[db:作者]  
收藏   我要投稿

题目

请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配

解题

字符相等,sId+1,pId+1
遇到点,sId+1,pId+1
遇到星号
表示它前面的字符可以出现任意次(包含0次)
//1、模式串当前字符出现0次,即*表示当前字符出现0次,则str=str,pattern=pattern+2;
//2、模式串当前字符出现1次,即*表示当前字符出现1次,则str=str+1,pattern=pattern+2;
//3、模式串当前字符出现2次或2次以上,即*表示当前字符出现2次或以上,则str=str+1,pattern=pattern;

直接讨论中复制的程序

public class Solution {
   public boolean match(char[] str, char[] pattern){
        if(str==null||pattern==null)
            return false;
        return isMatch(str,0,pattern,0);
    }
    ///三种可能:
    //1、模式串当前字符出现0次,即*表示当前字符出现0次,则str=str,pattern=pattern+2;
    //2、模式串当前字符出现1次,即*表示当前字符出现1次,则str=str+1,pattern=pattern+2;
    //3、模式串当前字符出现2次或2次以上,即*表示当前字符出现2次或以上,则str=str+1,pattern=pattern;
    public boolean isMatch(char[] str, int sIndex,char[] pattern,int pIndex){
        if(sIndex==str.length&&pIndex==pattern.length)
            return true;
        if(sIndex!=str.length&&pIndex==pattern.length)
            return false;
        //排除特例:a和a*a     
        //由于后面还有一个a所以前面a*需要当作 "0",就算str[]和pattern[]相等,也得舍去,看作不相同
        //所以isMatch(str,sIndex,pattern,pIndex+2)这句也需要加上
        if(pIndex+1
相关TAG标签
上一篇:《剑指offer》:[48]不能被继承的类-单例模式
下一篇:svn通信项目文件收发
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站