第三章 高质量代码

面试题19 正则表达式匹配

https://www.nowcoder.com/questionTerminal/45327ae22b7b413ea21df13ee7d6429c
将str和pattern分为四种情况讨论

  • str为空,pattern不为空
  • str不为空,pattern为空
  • str 和pattern为空
  • str和pattern都不为空
public class Solution {
    public boolean match(char[] str, char[] pattern)
    {
        if(str == null || pattern == null)    return false;
        return matchCore(str,pattern,0,0);
    }
    public boolean matchCore(char[] str,char[] pattern,int strIndex,int patternIndex){
        if(strIndex == str.length && patternIndex == pattern.length)
            return true;
        else if(strIndex != str.length && patternIndex == pattern.length)
            return false;
        else if(strIndex == str.length && patternIndex != pattern.length){
            if(patternIndex +1 < pattern.length && pattern[patternIndex+1] == '*' )
                return matchCore(str,pattern,strIndex,patternIndex+2);
            else
                return false;
        }
        else{
            if(patternIndex+1 < pattern.length && pattern[patternIndex+1] == '*'){
                    //*前面的字符匹配成功
                if( (strIndex <str.length &&pattern[patternIndex] == str[strIndex] )||(pattern[patternIndex]=='.' && strIndex!=str.length )){
                    //匹配,进入下一个状态
                    return matchCore(str,pattern,strIndex+1,patternIndex+2) ||
                    // 匹配成功,继续匹配,即*视为大于1
                        matchCore(str,pattern,strIndex+1,patternIndex)||
                     // 跳过 ,将*视为0
                        matchCore(str,pattern,strIndex,patternIndex+2);
                }else{
                    //*前面的字符没有匹配成功,*视为0次
                    return matchCore(str,pattern,strIndex,patternIndex+2);
                }
            }else{
                if((strIndex < str.length && str[strIndex] == pattern[patternIndex] )|| (pattern[patternIndex] == '.' &&strIndex != str.length))
                   return matchCore(str,pattern,strIndex+1,patternIndex+1);
                else
                    return false;
            }
        }
    }
}
12-21 14:33