剑指offer19题:正则表达式匹配

2018-12-27  本文已影响0人  灰化肥发黑会挥发

请实现一个函数用来匹配包含‘.’和‘’的正则表达式。模式中的字符'.'表示任意一个字符,而‘’表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。

思路:思路为从左到右遍历,假设模式串为pattern,模式串为str,分三种情况
  1. 当为普通字符时,判断str[i]和pattern[i]是否相等,如果不相等,则返回fase,如果相等str[i+1],pattern[i+1]
  2. 当为‘.’时,继续往下走,str[i+1],pattern[i+1]。
  3. 当'i+1'为‘*’时候,比较复杂,可以是{str[i+1],pattern]},{str[i+1],pattern[i+2]},{str[i],pattern[i+2]}
  4. 测试集,含有‘.’,'*'的字符串,空字符串,
public class MatchREG {
    public boolean match(String pattern,String str){
     if(str==null||pattern==null) return false;
     char[] patternChar = pattern.toCharArray();
     char[] strChar = pattern.toCharArray();
     return matchCore(patternChar,strChar,0,0);
    }
    public boolean matchCore(char[] pattern,char[] str,int pIndex,int sIndex){
        if(pIndex==str.length-1&&sIndex==str.length-1)
            return true;
        if(pIndex>=pattern.length-1) return false;
        if(sIndex>=str.length-1) return false;
        if(pIndex+1=='*'){
            if(str[pIndex]==pattern[sIndex])
            return matchCore(pattern,str,pIndex,sIndex+1)||matchCore(pattern,str,pIndex+2,sIndex+1)||matchCore(pattern,str,pIndex+2,sIndex);
            else return matchCore(pattern,str,pIndex+2,sIndex);
        }
         if(str[sIndex]==pattern[pIndex]||pattern[pIndex]=='.')
            return matchCore(pattern,str,pIndex+1,sIndex+1);
        return false;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读