• LeetCode--044--通配符匹配(java)*


    给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。

    '?' 可以匹配任何单个字符。
    '*' 可以匹配任意字符串(包括空字符串)。
    

    两个字符串完全匹配才算匹配成功。

    说明:

    • s 可能为空,且只包含从 a-z 的小写字母。
    • p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *

    示例 1:

    输入:
    s = "aa"
    p = "a"
    输出: false
    解释: "a" 无法匹配 "aa" 整个字符串。

    示例 2:

    输入:
    s = "aa"
    p = "*"
    输出: true
    解释: '*' 可以匹配任意字符串。
    

    示例 3:

    输入:
    s = "cb"
    p = "?a"
    输出: false
    解释: '?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。
    

    示例 4:

    输入:
    s = "adceb"
    p = "*a*b"
    输出: true
    解释: 第一个 '*' 可以匹配空字符串, 第二个 '*' 可以匹配字符串 "dce".
    

    示例 5:

    输入:
    s = "acdcb"
    p = "a*c?b"
    输入: false

    思路

    用sp和pp分别纪录s和p当前要进行匹配的位置;match纪录s中匹配到的位置,用于让sp下次从这里开始;star纪录*出现的位置,pp从*的下一个位置出发。

    例 s = "abcde"

        p = "*e"

    过程:star = 0,match = 0,pp = 1

       star!=-1  match = 1,sp = 1 pp = 1

               star!=-1  match = 2,sp = 2 pp = 1

               star!=-1  match = 3,sp = 3 pp = 1

               e == e    跳出while循环

               pp == p.length()  return true

    TIME:O(N)

    SPACE:O(1)

     1 class Solution {
     2     public boolean isMatch(String s, String p) {
     3         int sp = 0;
     4         int pp = 0;
     5         int star = -1;
     6         int match = 0;
     7         while(sp < s.length()){
     8             if(pp < p.length() &&(s.charAt(sp) == p.charAt(pp) || p.charAt(pp) == '?')){
     9                 sp++;
    10                 pp++;
    11             }else if(pp < p.length() && p.charAt(pp) == '*'){
    12                 star = pp;
    13                 match = sp;
    14                 pp++;
    15             }else if(star != -1){
    16                 match++;
    17                 sp = match;
    18                 pp = star + 1;
    19             }else return false;
    20         }
    21         while(pp < p.length() && p.charAt(pp) == '*'){
    22             pp++;
    23         }
    24         return p.length() == pp;
    25     }
    26 }

    2019-05-03 09:42:32

  • 相关阅读:
    switch 语句注意事项
    line-height 和 font-size的关系
    HTTP 缓存
    hashchange事件的认识
    面向对象的写法,见到就添,持续更新。。。
    chrome浏览器开发者工具之同步修改至本地
    history对象的一些知识点
    你不知道的函数节流,提高你的JS性能!
    玩媒体查询,就是这么简单粗暴!
    css中clip-path属性的运用
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/10804380.html
Copyright © 2020-2023  润新知