文章目录
 
 
1.题目
 
- 题目要求,「手画图解」动态规划,需要仔细的分情况讨论
- eg:
示例 2:
输入:s = "aa" p = "a*"
输出:true
解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。
因此,字符串 "aa" 可被视为 'a' 重复了一次。
 
- 思路:不使用DP
 星号匹配到s串中的位置,使用 iStart 来表示;
 p串中星号的位置很重要,用 jStar 来表示;
 再用两个变量i和j分别指向当前s串和p串中遍历到的位置;
- 思路:使用DP
2.代码
 
非DP写法,不能full ac
class Solution {
public:
    bool isMatch(string s, string p) 
    {
		int i=0,j=0,istar=-1,jstar=-1,s_size=s.size(),p_size=p.size();
		while (i<s_size)
		{
			if (j<p_size && (s[i] == p[j] || p[j] == '.'))
				i++,j++;
			else if (j<p_size && p[j] == '*')
				istar=i,jstar=j++;
			else if (istar>=0)
				i=++istar,j=jstart+1;
			else
				return false;
		}
		
		
		while (j<p_size && p[j] == '*') j++;
		return j==p_size;
    }
};
DP写法