52、正则表达式匹配(medium)

链接:https://www.nowcoder.com/practice/45327ae22b7b413ea21df13ee7d6429c?tpId=13&tqId=11205&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
来源:牛客网

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

这题对我来说至少是medium级别了,特别是第一次尝试做的时候,真是写不出来。
有个关键点就是要先处理下一个字符是星号的情况,如果遇到两个字符相同或pattern的字符是.(点号)就直接处理下一个字符的话,显然是不对的。比如 aaa,pattern是a*a,如果两个串都去掉第一个a,变成aa和*a就没法继续判断了。

public class Solution {
    public boolean match(char[] str, char[] pattern)
    {
        return match(str,0,pattern,0);
    }
    
    public boolean match(char[] str, int i, char[] pattern, int j){
        // 匹配串和模式串都到达末尾,匹配成功
        if(i>=str.length&&j>=pattern.length){
            return true;
        }
        
        // 匹配串未到末尾,模式串到达末尾,说明匹配失败
        if (i != str.length && j >= pattern.length) {
            return false;
        }
        
        //模式串未到末尾,匹配串可能到末尾也可能没到
        // 下一个模式符是*
        if(j+1<pattern.length&&pattern[j+1]=='*'){
            // 匹配串已经结束
            if (i >= str.length) {
                return match(str, i, pattern, j + 2);
            }
            
            // 匹配串未结束
            if(str[i]==pattern[j]||pattern[j]=='.'){
                    // 匹配0个
                return match(str,i,pattern,j+2)|| 
                    // 匹配1个
                    match(str,i+1,pattern,j+2)||
                    // 匹配多个
                    match(str,i+1,pattern,j);
            }else{
                return match(str, i, pattern, j + 2);
            }       
        }
        
        // 匹配串已结束
        if(i>=str.length){
            return false;
        }
        // 匹配串未结束
        else if(str[i]==pattern[j]||pattern[j]=='.'){
            return match(str,i+1,pattern,j+1);
        }
        
        return false;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 搞懂Python 正则表达式用法 Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一...
    厦热阅读 1,624评论 0 2
  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 7,186评论 0 99
  • 概述 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配、替换、截取匹配的字符串。常用的语...
    醉于麦田阅读 515评论 0 0
  • 简介 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文...
    我为峰2014阅读 522评论 0 2
  • 一、破解密码 1. 排列 代码演示:import itertools#1。排列 1,2,3 # 从n个不同的...
    郑元吉阅读 444评论 0 0