From cc65848c2a2fe6c21dcf419e2a9525e956b4e4bf Mon Sep 17 00:00:00 2001 From: Wen <409053122@qq.com> Date: Tue, 8 Nov 2022 15:20:59 +0800 Subject: [PATCH] =?UTF-8?q?[10]=20=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8F=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/leecode/10.正则表达式匹配.java | 50 ++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/leecode/10.正则表达式匹配.java 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 +