Leetcode P44 java一次遍历

执行用时:2 ms, 在所有 Java 提交中击败了93.75%的用户

内存消耗:41.2 MB, 在所有 Java 提交中击败了99.19%的用户

通过测试用例:1811 / 1811

idea

首先我们创建一些变量

        int sp = 0; //s的指针int pp = 0; //p的指针int matchIndex =-1; //s字符串当前与*匹配的下标int starIndex  =-1;  //p字符串*出现的下标

接下来拿s字符串与p进行匹配

       while (sp < s.length()) {....}

在匹配的过程中会发生几种情况

如果当前sp和pp下标的字符是一致,或者sp与pp下标的字符不一致但是pp下标字符是? 那么我们直接指针下移就好了

            //如果单个字符匹配成功或者与?匹配成功if (pp < p.length() && (p.charAt(pp) == s.charAt(sp) || p.charAt(pp) == '?')){sp++;pp++;}

如果我们pp下标的元素是*那么就我们记录下星的位置,还有s字符串中开始匹配的下标,如果已经记录过一次星星了在出现了一次星星那么就记录新的星星的下标

//如果当前是* 进行标记
else if (pp < p.length() && p.charAt(pp) == '*') {starIndex  = pp;matchIndex = sp;pp++;
}

如果我们出现了匹配不上的字符,但是我们已经记录过*了,那么我们假sp,matchIndex区间的字符都被⭐所替换了,在将p字符串的指针移动到星星所在的下标,

//某个字符需要用到此*进行匹配
else if (starIndex != -1) {pp = starIndex; //将pp移动到*的位置matchIndex++;   //匹配下标移动sp = matchIndex; //查看匹配下标是否能与pp进行匹配
}

如果以上判定都不满足,那么一定无法匹配返回false

else {return false;
}

这时候我们s字符串匹配完毕了,但是我们p字符串可能还有内容如果剩下的内容都是⭐那么我们就判定为匹配成功,如果不是⭐那么就匹配失败,因为s中没有字符再让p去匹配了

        while(pp < p.length() && p.charAt(pp) == '*'){pp++;}return pp == p.length();

code

public boolean isMatch(String s, String p) {int sp = 0; //s的指针int pp = 0; //p的指针int matchIndex =-1; //s字符串当前与*匹配的下标int starIndex  =-1;  //p字符串*出现的下标//s与p进行匹配while (sp < s.length()) {//如果单个字符匹配成功或者与?匹配成功if (pp < p.length() && (p.charAt(pp) == s.charAt(sp) || p.charAt(pp) == '?')){sp++;pp++;}//如果当前是* 进行标记else if (pp < p.length() && p.charAt(pp) == '*') {starIndex  = pp;matchIndex = sp;pp++;}//某个字符需要用到此*进行匹配else if (starIndex != -1) {pp = starIndex; //将pp移动到*的位置matchIndex++;   //匹配下标移动sp = matchIndex; //查看匹配下标是否能与pp进行匹配}else {return false;}}while(pp < p.length() && p.charAt(pp) == '*'){pp++;}return pp == p.length();
}

Leetcode P44 java一次遍历相关推荐

  1. Leetcode算法Java全解答--19. 删除链表的倒数第N个节点

    Leetcode算法Java全解答–19. 删除链表的倒数第N个节点 文章目录 Leetcode算法Java全解答--19. 删除链表的倒数第N个节点 题目 想法 结果 总结 代码 我的答案 大佬们的 ...

  2. Leetcode算法Java全解答--75. 颜色分类

    Leetcode算法Java全解答–75. 颜色分类 文章目录 Leetcode算法Java全解答--75. 颜色分类 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...

  3. Leetcode P85 Java

    Leetcode P85 Java 执行用时:8 ms, 在所有 Java 提交中击败了73.52%的用户 内存消耗:46.4 MB, 在所有 Java 提交中击败了10.50%的用户 通过测试用例: ...

  4. Leetcode算法Java全解答--73. 矩阵置零

    Leetcode算法Java全解答–73. 矩阵置零 文章目录 Leetcode算法Java全解答--73. 矩阵置零 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...

  5. java 迭代器只遍历了一次的解决方案

    java 迭代器只遍历了一次的解决方案 参考文章: (1)java 迭代器只遍历了一次的解决方案 (2)https://www.cnblogs.com/kinome/p/9969938.html 备忘 ...

  6. leetcode 46 java,leetcode46.java

    package leetcode; import java.util.ArrayList; import java.util.List; /** * Created by 林剑 on 2016/10/ ...

  7. java list 删除 遍历_Java list利用遍历进行删除操作3种方法解析

    Java list利用遍历进行删除操作3种方法解析 这篇文章主要介绍了Java list利用遍历进行删除操作3种方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需 ...

  8. java中map怎么遍历,Java中怎么遍历Map的所有的元素

    Java中怎样遍历Map的所有的元素 JDK1.4中 view plaincopy to clipboardprint? Map map = new HashMap(); Iterator it = ...

  9. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

最新文章

  1. 把 textbox 遍历赋值为空
  2. Python获取当前系统时间
  3. ICE Tester method viewer 的安装和使用,和客制化代码配合使用
  4. C语言变量声明内存分配
  5. linux进入终端tty3,Linux中终端界面与图形界面之间的切换关系
  6. 水晶报表10.0企业版下载地址及注册码
  7. 腾讯云不重启修改主机名
  8. android系统移植之按键驱动篇
  9. html依次显示选中的值,html 快速布局 - osc_pw143nru的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 【数学】如何求e的值
  11. 不装wine,你的.NET程序照样可以在Linux上运行!
  12. 虚云法师:但尽凡心,别无圣解
  13. gis栅格镶嵌时候出错
  14. 独家 | 基于NLP的COVID-19虚假新闻检测(附代码)
  15. 华为如何拍火烧云_华为手机10大摄影模式最全操作指南!2分钟教你妙用拍大片!...
  16. Redis消息队列 | 黑马点评
  17. 中文文本分类之TextRNN
  18. TL431在电源方面的应用
  19. 【前端】烟雾文字效果(html +js)
  20. docker-compose一直不下载咋办,docker-compose下载慢解决办法

热门文章

  1. TI培训——电子电路基础知识讲座(第三章上)
  2. Archery Tournament
  3. 想不想恶搞你的朋友?试试关不掉的弹窗(vbs)
  4. HTML和CSS3写的switch插件
  5. 数字联接新动能 | 专访亿联IT总监赖志豪:AI是亿联未来数字化建设的方向
  6. Mac电脑到底该用什么下载软件?Folx苹果电脑专用
  7. DIAGNOSTICS
  8. 项目工作任务 excel_在Excel中跟踪项目任务
  9. 数学课本上的9大变态!
  10. QML 信号与响应方法的总结