0
点赞
收藏
分享

微信扫一扫

10.正则表达式匹配

文章目录

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;
		}
		
		//没匹配完的p串里只能剩星号,不能有其他的字符,将连续的星号过滤掉
		while (j<p_size && p[j] == '*') j++;
		return j==p_size;
    }
};

DP写法

举报

相关推荐

0 条评论