一、题目内容

image.png

二、题解

解法1:

思路

image.png

代码

  1. class Solution {
  2. public boolean isMatch(String s, String p) {
  3. s = '0' + s;
  4. p = '0' + p;
  5. int m = s.length(), n = p.length();
  6. boolean[][] dp = new boolean[m][n];
  7. dp[0][0] = true;
  8. // 初始化首行
  9. for (int j = 2; j < n; j += 2) {
  10. dp[0][j] = dp[0][j - 2] && p.charAt(j) == '*';
  11. }
  12. // 状态转移
  13. for (int i = 1; i < m; i++) {
  14. for (int j = 1; j < n; j++) {
  15. if (p.charAt(j) == '*') {
  16. if (dp[i][j - 2]) {// *销毁前面的字符,出现0次
  17. dp[i][j] = true;
  18. } else if (dp[i - 1][j] && p.charAt(j - 1) == s.charAt(i)) {
  19. dp[i][j] = true;
  20. } else if (dp[i - 1][j] && p.charAt(j - 1) == '.') {
  21. dp[i][j] = true;
  22. }
  23. } else {
  24. if (dp[i - 1][j - 1] && s.charAt(i) == p.charAt(j)) {
  25. dp[i][j] = true;
  26. } else if (dp[i - 1][j - 1] && p.charAt(j) == '.') {
  27. dp[i][j] = true;
  28. }
  29. }
  30. }
  31. }
  32. return dp[m - 1][n - 1];
  33. }
  34. }