diff --git a/src/leecode/10.正则表达式匹配.java b/src/leecode/10.正则表达式匹配.java new file mode 100644 index 0000000..60421a1 --- /dev/null +++ b/src/leecode/10.正则表达式匹配.java @@ -0,0 +1,50 @@ +package leecode; + +/* + * @lc app=leetcode.cn id=10 lang=java + * + * [10] 正则表达式匹配 + */ + +import java.util.Stack; + +// @lc code=start +class Solution { + public boolean isMatch(String s, String p) { + int m = s.length(); + int n = p.length(); + boolean[][] dp = new boolean[m + 1][n + 1]; + dp[0][0] = true; + for (int i = 0; i <= m; i++) { + for (int j = 1; j <= n; j++) { + if (p.charAt(j - 1) == '*') { + dp[i][j] = dp[i][j - 2]; + if (match(s, p, i, j - 1)) { + dp[i][j] = dp[i][j] || dp[i - 1][j]; + } + } else { + if (match(s, p, i, j)) { + dp[i][j] = dp[i - 1][j - 1]; + } + } + } + } + return dp[m][n]; + } + + boolean match(String s, String p, int i, int j) { + if (i == 0) return false; + if (p.charAt(j - 1) == '.') { + return true; + } + return s.charAt(i - 1) == p.charAt(j - 1); + } + + public static void main(String[] args) { + Solution solution = new Solution(); + solution.isMatch("aa", "a"); + } + +} +// @lc code=end +