正则表达式匹配
来源:互联网 发布:开贝抠图软件破解版 编辑:程序博客网 时间:2024/06/06 12:21
本题源自leetcode
-----------------------------------------------------------
https://leetcode.com/problems/wildcard-matching/description/
思路:
1 用两个变量循环遍历字符串。两个变量标识 匹配到特殊字符* 的时候子串和母串的下标变量变化。
2 最后判断是否匹配。
代码:
bool isMatch(string s, string p) { int m=s.length(); int n=p.length(); int i=0; int j=0; int sp=-1; int pp=-1; while(i<m){ if(s[i]==p[j]||p[j]=='?'){ i++; j++; }else if(p[j]=='*'){ pp=++j; sp=i; }else{ if(pp>-1){ j=pp; i=++sp; }else{ return false; } } } while(p[j]=='*') j++; return j==n; }
代码2:
bool isMatch(string s, string p) { if(s.length()==0&&p.length()==0) return true; int m=s.length(); int n=p.length(); vector<vector<bool>> dp(m+1,vector<bool>(n+1,false)); dp[0][0]=true; for(int i=1;i<=n;i++){ // 第一行,匹配字符为空,所以考虑待匹配字符为*的情况 if(p[i-1]=='*'){ dp[0][i]=dp[0][i-1]; } } for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ if(s[i-1]==p[j-1]||p[j-1]=='?'){ dp[i][j]=dp[i-1][j-1]; } if(p[j-1]=='*'){ dp[i][j]=dp[i][j-1]||dp[i-1][j]; } } } return dp[m][n]; }
阅读全文
0 0
- 正则表达式字符匹配
- 正则表达式 匹配"<"方法!
- 正则表达式匹配规则
- 正则表达式匹配规则
- 正则表达式最小匹配
- 正则表达式匹配字符串
- 正则表达式匹配
- 正则表达式匹配汉字
- 正则表达式匹配规则
- 正则表达式匹配关键字
- 正则表达式多次匹配
- 正则表达式匹配
- 正则表达式匹配汇总
- java:正则表达式匹配
- 正则表达式匹配居民身份证
- 正则表达式匹配次
- 匹配的正则表达式
- 正则表达式匹配
- 构造函数
- Maven快速入门及应用
- 关于dBm转换为W的技巧
- Springboot mybatis集成 Invalid bound statement (not found)....
- 查看多台机器日志polysh
- 正则表达式匹配
- TensorFlow怎么安装?哪里下载安装包?安装教程、图像识别应用(附安装包/指南)
- 打印两个有序链表的公共部分(每日一道算法题)
- Map.Entry使用详解
- Spring核心框架体系结构
- AX调用.dll
- [leetcode]#108. Convert Sorted Array to Binary Search Tree
- synchronized的使用
- Bresenham直线算法