Dsxv

pattern_match

Jan 21st, 2020
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std ;
  3.  
  4. #define int long long
  5. const int N = 1e4 + 10 ;
  6. int dp[N][N] ;
  7. class Solution {
  8. public:
  9.     bool solve(string&s , string&p , int i = 0 , int j = 0){
  10.         if(i == s.size()){
  11.             if(j == p.size()) return true ;
  12.             if(p[j] == '*') return solve(s,p,i,j+1) ;
  13.             return false ;
  14.         }
  15.         if(j == p.size()) return 0 ;
  16.         if(dp[i][j] != -1) return dp[i][j] ;
  17.         if(p[j] == '*'){
  18.             return dp[i][j] =  (solve(s,p,i+1,j) + solve(s,p,i,j+1));
  19.         }else if(p[j] == '?'){
  20.             return dp[i][j] = solve(s,p,i+1,j+1) ;
  21.         }else{
  22.             if(s[i] != p[j]) return false ;
  23.             return dp[i][j] = solve(s,p,i+1,j+1) ;
  24.         }
  25.     }
  26.    
  27.     bool isMatch(string s, string p) {
  28.         for(int i = 0 ; i <= s.size() ; i++){
  29.             for(int j = 0 ; j <= p.size() ; j++ ) dp[i][j] = -1 ;
  30.         }
  31.         return solve(s,p) ;
  32.     }
  33. } s;
  34. int32_t main(){
  35.     string a , b ;
  36.     cin >> a >> b ;
  37.     cout << s.isMatch(a,b) ;
  38.     return 0 ;
  39. }
Add Comment
Please, Sign In to add comment