这两道都是类似正则表达式匹配的问题,放在一起mark一下
Problem 10 Regular Expression Matching
参考 https://blog.csdn.net/hk2291976/article/details/51165010
这道正则表达式匹配的问题,直接查的博客,看到一篇思路比较好的,包括回溯和动态规划两种方法
补充:自己根据其思路写代码的时候发现了其中一些小错误,如果不对边界进行仔细检查的话会出现字符串越界的情况。
以下是我自己写的代码:
class Solution {
public boolean isMatch(String s, String p) {
int len1=s.length();
int len2=p.length();
boolean result=comp(s,len1-1,p,len2-1);
return result;
}
public boolean comp (String s, int i, String p, int j)
{
while (i<0 && j>=0 && p.charAt(j)=='*') j=j-2;
if (i<0 && j<0) return true;
if (i>=0 && j<0) return false;
if(i>=0)
{
if(s.charAt(i)==p.charAt(j) || p.charAt(j)=='.') return comp(s,i-1,p,j-1);
else if (p.charAt(j)=='*')
{
if ((p.charAt(j-1)==s.charAt(i) || p.charAt(j-1)=='.')&& comp(s,i-1,p,j)) return true;
else return comp(s,i,p,j-2);
}
else return false;
}
return false;
}
}
Problem 44 这道比上一道的难度更大一些,主要采用回溯的方法,在p串遇到*的时候,记录s和p串当前的位置,并一步一步向前比较,否则从之前的记录点回溯,我认为这里的回溯是指回到之前的记录点并让*所表示的字符增加一位,然后继续一步一步比较
觉得这篇文章说的不错:https://blog.csdn.net/feliciafay/article/details/42392677