Leetcode Wildcard Matching
题目地址:https://leetcode.com/problems/wildcard-matching/
动态规划解答:
public class Solution {public boolean isMatch(String s, String p) {if(p.length() == 0) return s.length() == 0;//网上查的通过测试需要加if(s.length()>300 && p.charAt(0)=='*' && p.charAt(p.length()-1)=='*')return false;//匹配矩阵,表示s中的前i个字符和p中的前j个字符匹配上boolean[][] matchMatrix = new boolean[s.length()+1][p.length()+1];matchMatrix[0][0] = true;//动态规划过程for(int j=0;j<p.length();j++){ //p[j]不是*if(p.charAt(j) != '*'){for(int i=0;i<s.length();i++){ //matchMatrix[i+1][j+1]只和matchMatrix[i][j]有关matchMatrix[i+1][j+1] = matchMatrix[i][j] && (p.charAt(j) == '?' || p.charAt(j) == s.charAt(i));}}else{int i = 0; //找到s中前i个与p中前j个匹配,则s[i].....s[s.length()]都与p中前j+1个(第j+1个字符为*)匹配,因为*可匹配任意字符串while(i <= s.length() && !matchMatrix[i][j]) i++;for(; i <= s.length(); i++) matchMatrix[i][j+1] = true; }}return matchMatrix[s.length()][p.length()];} }
matchMatrix中的第j+1行只与第j行有关,匹配数组也压缩为一维,动态规划升级版:
public class Solution {public boolean isMatch(String s, String p) {if(p.length() == 0) return s.length() == 0;if(s.length()>300 && p.charAt(0)=='*' && p.charAt(p.length()-1)=='*')return false;boolean[] match = new boolean[s.length()+1];match[0] = true;for(int j = 0;j<p.length();j++){if(p.charAt(j) != '*'){for(int i = s.length()-1;i>=0;i--){match[i+1] = match[i] && (p.charAt(j) == '?' || p.charAt(j) == s.charAt(i));}}else{int i = 0;while(i<=s.length()&&!match[i])i++;for(;i<=s.length();i++){match[i] = true;}}match[0] = match[0]&&p.charAt(j)=='*';}return match[s.length()];} }
转载于:https://www.cnblogs.com/xiongyuesen/p/4401495.html
Leetcode Wildcard Matching相关推荐
- [LeetCode] Wildcard Matching 题解
6. Wildcard Matching 题目 Implement wildcard pattern matching with support for '?' and '*'. '?' Matche ...
- 【LeetCode】44. Wildcard Matching (2 solutions)
Wildcard Matching Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any ...
- 【To Understand! 重点 递归 动态规划 正则表达式匹配】LeetCode 44. Wildcard Matching
LeetCode 44. Wildcard Matching Solution1:我的答案 递归,时间复杂度是O(2n)O(2n)O(2^n)因为超时未能AC 只是记录一下,以警示后人-- class ...
- LeetCode: 44. Wildcard Matching
LeetCode: 44. Wildcard Matching 题目描述 Implement wildcard pattern matching with support for '?' and '* ...
- LeetCode - 44. Wildcard Matching
44. Wildcard Matching Problem's Link --------------------------------------------------------------- ...
- LeetCode 10. Regular Expression Matching / 44. Wildcard Matching
10. Regular Expression Matching 经典DP题目,比较复杂,需要多复习. dp[i][j] 表示 s 下标0~i,p 下标0~j 是否能够匹配 dp[i-1][j-1] ...
- [OJ] Wildcard Matching (Hard)
LintCode 192. Wildcard Matching (Hard) LeetCode 44. Wildcard Matching (Hard) 第二次刷还是被这题虐. 其实就是跪在一个地方, ...
- [LintCode] Wildcard Matching
Wildcard Matching Implement wildcard pattern matching with support for '?'and '*'. '?' Matches any s ...
- leetcode-44. Wildcard Matching
题目阐释: 正则匹配字符串,用程序实现 关键理解: 正则匹配,动态规划思想,一个个向后追溯,后面的依赖前面的匹配成功. 正则和待匹配的字符串长度不一,统一到正则字符串的index索引上,每次的字符串i ...
最新文章
- shell-awk常见用法
- Azure负载均衡器Standard Load Balancer介绍
- C++ Primer 有感(类)
- SpaceEmacs Rocks Day8 学习笔记
- Swift学习笔记(10)--枚举
- mybatis 传参是 liststring 的注意事项
- C语言如何用fopen创建可读写txt
- 工作总结:将电脑中的ARP缓存清空黑屏命令
- ubuntu 远程 搭建 Jupyter Notebook 服务器配置
- LeetCode刷题——279. 完全平方数
- Linux文件系统(七)---系统调用之open操作(一)
- 关于java常见异常举例
- 店铺流量下跌应该如何解决
- 题目1163:素数 九度OJ
- 支付宝付款前后端(app)
- CSS clip:rect矩形剪裁功能及一些应用介绍
- Linux C/C++源码实现常见命令mkdir
- 【Unity】由预制体实例获取预制体资源及预制体资源路径
- 什么样的蓝牙耳机打电话好用?接电话清晰的蓝牙耳机推荐
- ssm招投标管理系统毕业设计(附源码、运行环境)