剑指offer——正则式表达

主要难点在于当第二个char为'*'时,先判断原字符组存在并且相等或者匹配字符为'.‘, 

public class Solution {
    public boolean match(char[] str, char[] pattern)
    {
        if(pattern==null)
            return str==null;
        return match(str,0,pattern,0);

    }
    public boolean match(char[] str,int sStart,char[] pattern,int pStart){
        if(pattern.length-pStart==0)
            return str.length-sStart==0;
        if(pattern.length-pStart==1){
            return str.length-sStart==1&&(pattern[pStart]=='.'||pattern[pStart]==str[sStart]);
        } 
        if(pattern[pStart+1]!='*'){
            return str.length-sStart>0&&(str[sStart]==pattern[pStart]||pattern[pStart]=='.')
                &&match(str,sStart+1,pattern,pStart+1);
        }
        else{
           while(str.length-sStart>0&&(str[sStart]==pattern[pStart]||pattern[pStart]=='.')){
               if(match(str,sStart,pattern,pStart+2)) return true;//使后面的匹配上,返回true
               sStart++;
           }
        }
        return match(str,sStart,pattern,pStart+2);
    }
}

注意有下面几种情况

"ab",".*"    true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值