美文网首页
剑指offer19题:正则表达式匹配

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

作者: 灰化肥发黑会挥发 | 来源:发表于2018-12-27 12:19 被阅读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;
        }
    }
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/sunllqtx.html