| 96 | |
| 97 | impl<'a> Dp<'a> { |
| 98 | pub fn cal(&mut self, i:usize, j:usize) -> i32 { |
| 99 | if self.dp[i][j] >= 0 { return self.dp[i][j] } |
| 100 | self.dp[i][j] = match (self.s[i], self.p[j]) { |
| 101 | (_, '*') => { |
| 102 | if self.cal(i, j-1) == 1 { 1 } |
| 103 | else if self.cal(i-1, j) == 1 { 1 } |
| 104 | else if self.cal(i-1, j-1) == 1 { 1 } |
| 105 | else { 0 } |
| 106 | } |
| 107 | (_, '?') => self.cal(i-1, j-1), |
| 108 | (a, b) => { |
| 109 | if a == b { self.cal(i-1, j-1) } |
| 110 | else { 0 } |
| 111 | } |
| 112 | }; |
| 113 | self.dp[i][j] |
| 114 | } |
| 115 | |
| 116 | pub fn new(s: &'a [char], p: &'a [char], dp: &'a mut Vec<Vec<i32>>) -> Dp<'a> { |
| 117 | Dp { s,p,dp } |