题目地址: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相关推荐

  1. [LeetCode] Wildcard Matching 题解

    6. Wildcard Matching 题目 Implement wildcard pattern matching with support for '?' and '*'. '?' Matche ...

  2. 【LeetCode】44. Wildcard Matching (2 solutions)

    Wildcard Matching Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any ...

  3. 【To Understand! 重点 递归 动态规划 正则表达式匹配】LeetCode 44. Wildcard Matching

    LeetCode 44. Wildcard Matching Solution1:我的答案 递归,时间复杂度是O(2n)O(2n)O(2^n)因为超时未能AC 只是记录一下,以警示后人-- class ...

  4. LeetCode: 44. Wildcard Matching

    LeetCode: 44. Wildcard Matching 题目描述 Implement wildcard pattern matching with support for '?' and '* ...

  5. LeetCode - 44. Wildcard Matching

    44. Wildcard Matching Problem's Link --------------------------------------------------------------- ...

  6. 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] ...

  7. [OJ] Wildcard Matching (Hard)

    LintCode 192. Wildcard Matching (Hard) LeetCode 44. Wildcard Matching (Hard) 第二次刷还是被这题虐. 其实就是跪在一个地方, ...

  8. [LintCode] Wildcard Matching

    Wildcard Matching Implement wildcard pattern matching with support for '?'and '*'. '?' Matches any s ...

  9. leetcode-44. Wildcard Matching

    题目阐释: 正则匹配字符串,用程序实现 关键理解: 正则匹配,动态规划思想,一个个向后追溯,后面的依赖前面的匹配成功. 正则和待匹配的字符串长度不一,统一到正则字符串的index索引上,每次的字符串i ...

最新文章

  1. shell-awk常见用法
  2. Azure负载均衡器Standard Load Balancer介绍
  3. C++ Primer 有感(类)
  4. SpaceEmacs Rocks Day8 学习笔记
  5. Swift学习笔记(10)--枚举
  6. mybatis 传参是 liststring 的注意事项
  7. C语言如何用fopen创建可读写txt
  8. 工作总结:将电脑中的ARP缓存清空黑屏命令
  9. ubuntu 远程 搭建 Jupyter Notebook 服务器配置
  10. LeetCode刷题——279. 完全平方数
  11. Linux文件系统(七)---系统调用之open操作(一)
  12. 关于java常见异常举例
  13. 店铺流量下跌应该如何解决
  14. 题目1163:素数 九度OJ
  15. 支付宝付款前后端(app)
  16. CSS clip:rect矩形剪裁功能及一些应用介绍
  17. Linux C/C++源码实现常见命令mkdir
  18. 【Unity】由预制体实例获取预制体资源及预制体资源路径
  19. 什么样的蓝牙耳机打电话好用?接电话清晰的蓝牙耳机推荐
  20. ssm招投标管理系统毕业设计(附源码、运行环境)

热门文章

  1. 4.02Day12函数 装饰器
  2. Git本地仓库与远程仓库关联
  3. kotlin学习笔记——单元测试
  4. PHP之GD函数的使用
  5. 设计模式-行为型模式-观察者模式
  6. 赣南师范学院数学竞赛培训第02套模拟试卷参考解答
  7. Central Europe Regional Contest 2012 Problem c: Chemist’s vows
  8. JavaWeb完整项目要用到的专业技能
  9. 图文详解Java环境变量配置方法
  10. 承载(Host)通用语言执行时