题解 | #正则表达式匹配#

正则表达式匹配

http://www.nowcoder.com/practice/28970c15befb4ff3a264189087b99ad4

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param pattern string字符串 
     * @return bool布尔型
     */
    char s;
    public boolean match(String str, String pattern) {
        if(str.length()==0 && pattern.length()==0)
            return false;
        return f(str,pattern,0,0);
    }

    public boolean f (String str, String pattern,int i,int j) {
        //全部匹配成功
        if(i>=str.length() && j>=pattern.length())
            return true;
        //pattern匹配完了
        if(i<str.length() && j>=pattern.length())
            return false;
        //下一个不是星 或者没有下一个 那么就关注当前位置能否匹配上
        if(j==pattern.length()-1 ||(j<pattern.length()-1 && pattern.charAt(j+1)!='*')){
            //匹配成功 或者  是.
            if(i<str.length()&& (str.charAt(i)==pattern.charAt(j) || pattern.charAt(j)=='.'))
                return f(str,pattern,i+1,j+1);
            //匹配失败 
            return false;
        }
        // 当前位置不能成功匹配,说明pattern[j]字符不能被使用
        if(i==str.length() || (i<str.length() && str.charAt(i)!=pattern.charAt(j) && pattern.charAt(j)!='.')){
            return f(str,pattern,i,j+2);
        }
        return f(str, pattern, i, j + 2) || f(str, pattern, i + 1, j + 2) || f(str, pattern, i + 1, j); // 当前位置成功匹配,分为星号匹配0次、1次、多次三种情况

       
    }
}

不是很会

全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务