剑指Offer学习-面试题19:正则表达式匹配

	/**
     * 正则表达式匹配
     * <p>
     * .表示任意一个字符
     * *表示它前面的字符可以出现任意次
     *
     * @param s
     * @param pattern
     * @return
     */
    public boolean match(String s, String pattern) {
       if (null == s || null == pattern) return false;
        if ("".equals(s) && "".equals(pattern)) return true;
        return match(s, 0, pattern, 0);
    }

    private static boolean matchCore(String s, int s_index, String p, int p_index) {
        //如果匹配字符和正则字符同时溢出,则返回
        if (s_index >= s.length() && p_index >= p.length()) return true;
        //遇到匹配的字符没有到末尾而正则已经到末尾,则返回
        if (s_index < s.length() && p_index == p.length()) return false;
        if (p_index + 1 < p.length() && p.charAt(p_index + 1) == '*') {
            //表示s和p匹配,或者不匹配但是p是.,则进入 
            // 如s = a p = .* ,s =a p =a*
            if (s_index < s.length() && (s.charAt(s_index) == p.charAt(p_index) || p.charAt(p_index) == '.')) {
                //第一个表示*匹配了0个字符
                //第二个表示匹配了1到n个字符
                return match(s, s_index, p, p_index + 2) || match(s, s_index + 1, p, p_index);
            }
            //表示*前面的字符与s的字符不匹配,也表示*匹配了0个字符
            //如s = a p = b*
            return match(s, s_index, p, p_index + 2);
        }
        //表示s和p匹配,或者不匹配但是p是.,则进入
        // 如s = a p = . ,s =a p =a
        if (s_index < s.length() && (s.charAt(s_index) == p.charAt(p_index) || p.charAt(p_index) == '.')) {
            return match(s, s_index + 1, p, p_index + 1);
        }
        //s和p不相等 s = a p = b
        return false;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值