zoukankan      html  css  js  c++  java
  • [LeetCode #10] Regular Expression Matching

    Implement regular expression matching with support for '.' and '*'.

    '.' Matches any single character.
    '*' Matches zero or more of the preceding element.
    
    The matching should cover the entire input string (not partial).
    
    The function prototype should be:
    bool isMatch(const char *s, const char *p)
    
    Some examples:
    isMatch("aa","a") → false
    isMatch("aa","aa") → true
    isMatch("aaa","aa") → false
    isMatch("aa", "a*") → true
    isMatch("aa", ".*") → true
    isMatch("ab", ".*") → true
    isMatch("aab", "c*a*b") → true
    
     1 class Solution {
     2 public:
     3     bool isMatch(string s, string p) {
     4         int m = s.size(), n = p.size();
     5         
     6         vector<vector<bool>> dp (m+1, vector<bool> (n+1, false));
     7         
     8         dp[0][0] = true;
     9         
    10         for (int i = 0; i < m; i++){
    11             dp[i+1][0] = false;
    12         }
    13         
    14         for (int j = 0; j < n; j++){
    15             dp[0][j+1] = j > 0 && p[j] == '*' && dp[0][j-1];
    16         }
    17         
    18         for (int i = 0; i < m; i++){
    19             for (int j = 0; j < n; j++){
    20                 if (p[j] != '*'){
    21                     dp[i+1][j+1] = dp[i][j] && (s[i] == p[j] || p[j] == '.');
    22                 }else{
    23                     dp[i+1][j+1] = dp[i+1][j-1] || ((dp[i][j+1]) && (s[i] == p[j-1] || p[j-1] == '.'));
    24                 }
    25             }
    26         }
    27         
    28         return dp[m][n];
    29     }
    30 };
  • 相关阅读:
    gcc编译时头文件和库文件搜索路径
    vim 使用
    stdlib.h stdio.h
    sys/types.h fcntl.h unistd.h sys/stat.h
    gcc 使用
    grep 正则表达式
    firefox
    CentOS7 屏幕亮度的命令行管理
    linuxqq
    rpm 与 yum 源
  • 原文地址:https://www.cnblogs.com/amadis/p/5926445.html
Copyright © 2011-2022 走看看