
方法1: dp。我发誓,我再也不做dp hard题目了,如果做,我只看10分钟,想不出来直接看答案,真的是在浪费时间。这道题直接看这个链接,或者看lc官方解答2也行。代码是抄discussion区最高赞的答案。
class Solution {
public boolean isMatch(String s, String p) {
if (s == null || p == null) {
return false;
}
boolean[][] dp = new boolean[s.length()+1][p.length()+1];
dp[0][0] = true;
for (int i = 0; i < p.length(); i++) {
if (p.charAt(i) == '*' && dp[0][i-1]) {
dp[0][i+1] = true;
}
}
for (int i = 0 ; i < s.length(); i++) {
for (int j = 0; j < p.length(); j++) {
if (p.charAt(j) == '.') {
dp[i+1][j+1] = dp[i][j];
}
if (p.charAt(j) == s.charAt(i)) {
dp[i+1][j+1] = dp[i][j];
}
if (p.charAt(j) == '*') {
if (p.charAt(j-1) != s.charAt(i) && p.charAt(j-1) != '.') {
dp[i+1][j+1] = dp[i+1][j-1];
} else {
dp[i+1][j+1] = dp[i][j+1] || dp[i+1][j-1];
}
}
}
}
return dp[s.length()][p.length()];
}
}
总结:
- 无
博客探讨了一种使用动态规划解决字符串匹配问题的方法,作者分享了自己对于DP难题的策略,即在限定时间内思考,否则直接参考答案。文章提供了具体的Java代码实现,并总结了关键点。
1532

被折叠的 条评论
为什么被折叠?



