zoukankan      html  css  js  c++  java
  • 剑指offer-正则表达式匹配

    请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。

        public boolean match(char[] str, char[] pattern)
        {
            return String.valueOf(str).matches(String.valueOf(pattern));
        }
    public class Solution {
        public boolean match(char[] str, char[] pattern)
        {
            if(str ==null||pattern==null){
                return false;
            }
            return help(str,0,pattern ,0);
        }
        public boolean help(char[] str,int sindex,char[] pattern,int pindex){
            if(sindex == str.length&& pindex==pattern.length){
                return true;
            }
            if(pindex==pattern.length){
                return false;
            }
            if((pindex+1<pattern.length)&&pattern[pindex+1]=='*'){
                if(sindex!=str.length&&(pattern[pindex]=='.'||pattern[pindex]==str[sindex])){//判断sindex防止数组溢出
                    return help(str,sindex,pattern,pindex+2)||help(str,sindex+1,pattern,pindex+2)||help(str,sindex+1,pattern,pindex);//匹配0个字符,一个字符,一直匹配
                }
                else{
                    return help(str,sindex,pattern,pindex+2);
                }
            }
            if(sindex!=str.length&&(pattern[pindex]=='.'||pattern[pindex]==str[sindex])){
                return help(str,sindex+1,pattern,pindex+1);
            }
            return false;
        }
    }
  • 相关阅读:
    Linux-文件目录管理
    20. 有效的括号
    242. 有效的字母异位词
    387. 字符串中的第一个唯一字符
    136. 只出现一次的数字
    14. 最长公共前缀
    268. 丢失的数字
    169. 多数元素
    26. 删除有序数组中的重复项
    283. 移动零
  • 原文地址:https://www.cnblogs.com/zhacai/p/11282342.html
Copyright © 2011-2022 走看看