10.正则表达式匹配

10.正则表达式匹配


上述5种可匹配情况的举例,便于理解:

1、a与ab星号是匹配的,分析:a与a匹配,让 b星号看作出现0次。

2、abb与ab*匹配,分析:ab与ab星号匹配,让b多出现1次时,能匹配

3、abb与a.*匹配,分析:让字符串.多出现1次时,能匹配。

4、abc和abc匹配,分析:ab与ab匹配,c与c相等。

5、abc与ab.匹配,分析:将字符.看作.时匹配。

初始化及返回值

cpp 复制代码
class Solution{
public:
	bool isMatch(string s,string p){
		int m=s.size()+1,n=p.size()+1;
		vector<vector<bool>> dp(m,vector<bool>(n,false));
		dp[0][0]=true;
		//初始化首行
		for(int j=2;j<n;j+=2){
			dp[0][j]=dp[0][j-2]&&p[j-1]=='*';
		}
		//状态转移
		for(int i=1;i<m;i++){
			for(int j=1;j<n;j++){
				if(p[j-1]=='*'){
					if(dp[i][j-2]) dp[i][j]=true;
					else if(dp[i-1][j]&&s[i-1]==p[j-2]) dp[i][j]=true;
					else if(dp[i-1][j]&&p[j-2]=='.') dp[i][j]=true;
				}else{
					if(dp[i-1][j-1]&&s[i-1]==p[j-1]) dp[i][j]=true;
					else if(dp[i-1][j-1]&&p[j-1]=='.') dp[i][j]=true;
				}
			}
		}
		return dp[m-1][n-1];
	}
};
相关推荐
q***649710 小时前
SpringMVC 请求参数接收
前端·javascript·算法
Lwcah10 小时前
Python | LGBM+SHAP可解释性分析回归预测及可视化算法
python·算法·回归
小此方10 小时前
从零开始手搓堆:核心操作实现 + 堆排序 + TopK 算法+ 向上调整 vs 向下调整建堆的时间复杂度严密证明!
开发语言·数据结构·算法
前端炒粉13 小时前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
断剑zou天涯15 小时前
【算法笔记】窗口内最大值或最小值的更新结构
java·笔记·算法
smj2302_7968265215 小时前
解决leetcode第3753题范围内总波动值II
python·算法·leetcode
骑着猪去兜风.17 小时前
线段树(二)
数据结构·算法
fengfuyao98518 小时前
竞争性自适应重加权算法(CARS)的MATLAB实现
算法
散峰而望18 小时前
C++数组(二)(算法竞赛)
开发语言·c++·算法·github
leoufung18 小时前
LeetCode 92 反转链表 II 全流程详解
算法·leetcode·链表