zoukankan      html  css  js  c++  java
  • 正则表达式匹配

    剑指offe第19题,很经典。

    如果不用递归的思维做,会很麻烦。

    因为对于.*、*.、*..等一些特殊情况处理会非常麻烦。

    所以采用递归的思路。(如果加上的动态规划思想,记录dp[m][n]表示str + m与pattern + n是否能正确匹配。就可以把复杂度控制在O(n*n)。

    class Solution {
    public:
        bool match(char* str, char* pattern)
        {
            if (str == nullptr || pattern == nullptr) {
                return false;
            }
            
            if (*str == '' && *pattern == '') {
                return true;
            }
            
               if (*pattern == '') {
                return false;
            }
            
            if ( *(pattern + 1) == '*') {
                 if (*pattern == *str || (*pattern == '.' && *str != '')) {
                    return match(str + 1, pattern) || 
                           match(str, pattern + 2) || 
                           match(str + 1, pattern + 2);
                } else {
                    return match(str, pattern + 2);
                }
            }
            
            if (*pattern == *str || (*pattern == '.' && (*str) != '')) {
                return match(str + 1, pattern + 1);
            }
            
            return false;
        }
    };
  • 相关阅读:
    建立文件结构
    PCL类的设计结构
    如何编写新的PCL类
    PCL推荐的命名规范(2)
    PCL推荐的命名规范(1)
    PCL中异常处理机制
    如何增加新的PointT类型
    hdoj 1728 逃离迷宫
    ny710 外星人的供给站
    ny714 Card Trick
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/7395665.html
Copyright © 2011-2022 走看看