• 44. Wildcard Matching


    一、题目

      1、审题

      2、分析:

        判断两个字符串是否匹配,其中 p 中的特殊字符 ‘?’可以匹配任意一个字母, ‘*’ 可以匹配 0 个或多个不同的连续字符。

    二、解答

      1、思路:

        ①、定义两个指针,pIndex 指向 p 的下标, sIndex 指向 s 的下标;

         再定义两个指针,pStarIndex 指向 p 中最新出现的星号出现时的后一个字符的位置, sMatch 指向 s 中当前确定要匹配入星号中的字符的下标;

        ②、在 sIndex 指向未超出 s 范围时,

          a、当 s 与 p 单个字符匹配时, sIndex 与 pIndex 均向后移动一个单位;

          b、当 p 中出现 ‘*’ 时,pStarIndex 记录 p 下标,且 pIndex 向后移动一个单位, sIndex 当前保持不变(即去除‘*’开始假使能够匹配当前字符串);

          c、当出现字符不匹配时,pIndex 立马指向星号后一个字符,即 s中此字符算入 p中‘*’ 的匹配范围内;

        ③ 若 sIndex 已经指完最后一个字符时, 判断 pIndex 是否已经指完 p 的字符,或者 p 的后续字符只剩下 ‘*’,此时返回 true,否则 false;

    public boolean isMatch(String s, String p) {
            
            int sIndex = 0, pIndex = 0;    // s、p 遍历时的下标
            int sMatch = 0;            // 记录 s 开始与 p 的星号开始 匹配的下标
            int pStarIndex = - 1;    // p 星号的 下表
            
            while(sIndex < s.length()) {
                
                if(pIndex < p.length() &&
                        (p.charAt(pIndex) == '?' ||
                            p.charAt(pIndex) == s.charAt(sIndex))) {
                    sIndex++;
                    pIndex++;
                }
                else if(pIndex < p.length() && p.charAt(pIndex) == '*') {
                    pStarIndex = pIndex++;    // pIndex 向后移动
                    sMatch = sIndex;        // sIndex 不移动
                }
                else if(pStarIndex != -1) {        // p与s字符不匹配时,p 中存在 *
                    pIndex = pStarIndex + 1;    // pIndex 重新从星号后边开始
                    sIndex = ++sMatch;
                    
                }
                else 
                    return false;
                
            }
            
            while(pIndex < p.length() && p.charAt(pIndex) == '*')
                pIndex++;
            return pIndex == p.length();
        }

       

      2、有时间研究这篇大佬博客  

          https://blog.csdn.net/jmspan/article/details/51460021

  • 相关阅读:
    linux查看日志文件内容命令tail、cat、tac、head、echo
    改变自己的128种方法,教你变得更优秀!
    php 23种设计模式
    Swoole消息推送
    PHP 出现 502 解决方案
    【centos7】添加开机启动服务/脚本
    curl 参数配置详解
    i系列标准-互联网周刊
    MySQL 设计与开发规范2
    Cocos Creator webviw网页置顶增加返回键的方法
  • 原文地址:https://www.cnblogs.com/skillking/p/9610729.html
Copyright © 2020-2023  润新知