博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode--044--通配符匹配(java)*
阅读量:7296 次
发布时间:2019-06-30

本文共 1644 字,大约阅读时间需要 5 分钟。

给定一个字符串 (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

转载于:https://www.cnblogs.com/NPC-assange/p/10804380.html

你可能感兴趣的文章
单片机系列学习
查看>>
[LeetCode] Combinations
查看>>
java中的几种对象(PO,VO,DAO,BO,POJO)
查看>>
HDOJ--4786--Fibonacci Tree【生成树】
查看>>
功能超级丰富的彩色贪吃蛇,有道具,有等级!
查看>>
angularjs之browserTrigger
查看>>
.net程序员面试考试题目
查看>>
1.3. redis-cli - Command-line client to redis-server
查看>>
两个平板打天下-将中国看做一个城市圈,漉战移动互联网、高铁时代
查看>>
Android 部分机型GridView四周默认间距
查看>>
在Html中使用Requirejs进行模块化开发
查看>>
7.7. 其他证书工具
查看>>
[Erlang 0014]Erlang垃圾回收机制
查看>>
Hibernate用Mysql数据库时链接关闭异常的解决
查看>>
Android 中文 API (19) —— TwoLineListItem
查看>>
EF架构~单表一对多集合的插入(树型结构)
查看>>
Linux Shell脚本实现根据进程名杀死进程
查看>>
[logstash-input-file]插件使用详解
查看>>
Codeforces 839D Winter is here【数学:容斥原理】
查看>>
FPGA在各行业的应用分析
查看>>