zoukankan      html  css  js  c++  java
  • 牛客(52)正则表达式匹配

    //    题目描述
    //    请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,
    //    而'*'表示它前面的字符可以出现任意次(包含0次)。
    //    在本题中,匹配是指字符串的所有字符匹配整个模式。
    //    例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
    
        public static boolean match(char[] str, char[] pattern) {
            if(str == null || pattern == null){
                return false;
            }
            return matchCode(str,0,pattern,0);
        }
    
        public static boolean matchCode(char[] str, int strIndex, char[] pattern, int patternIndex) {
            //匹配结束
            if (strIndex==str.length&&patternIndex==pattern.length){
                return true;
            }
            //匹配失败
            if (strIndex!=str.length&&patternIndex==pattern.length){
                return false;
            }
            //当第二个是*时
            if (patternIndex<pattern.length-1 && pattern[patternIndex+1]=='*'){
                //当前字符可以匹配
                if (strIndex != str.length&&(str[strIndex]==pattern[patternIndex]||pattern[patternIndex]=='.')){
                    return matchCode(str,strIndex+1, pattern,patternIndex)||//当前匹配
                            matchCode(str,strIndex+1, pattern,patternIndex+2)||//匹配一次结束
                            matchCode(str,strIndex, pattern,patternIndex+2);//匹配零次结束
                }else{
                    return matchCode(str,strIndex, pattern,patternIndex+2);
                }
            }
    //        当第二个不是*
            if (strIndex != str.length&&(str[strIndex]==pattern[patternIndex]||pattern[patternIndex]=='.')){
                return matchCode(str,strIndex+1, pattern,patternIndex+1);
            }
    
            return false;
        }
  • 相关阅读:
    js正则表达式
    js遍历对象属性
    C# 带Cookies发送请求
    C# Cookies设置和读取
    C# ref 和 out 的使用
    jq 禁用复选框 和输入框
    C++学习之嵌套类和局部类
    C++学习之this指针
    C++学习之运算符重载的总结
    Labview中引用,属性节点,局部变量之间的区别
  • 原文地址:https://www.cnblogs.com/kaibing/p/9099270.html
Copyright © 2011-2022 走看看