LeetCode#44. Wildcard Matching

  • 题目:给定两个字符串,s为待匹配字符串,p为模式字符串
    • 匹配规则: ‘?’能匹配任何单个字符,’*’能匹配任何字符序列包括空字符null
  • 难度:Hard
  • 思路:一开始思路方向是有的,但是分情况讨论没有理清楚,最后忍不住看了discuss,在源码上稍微优化了一下
  • 代码:
public class Solution {
    public boolean isMatch(String s, String p) {

       int len1 = 0;//s的长度计数器
       int len2 = 0;//p的长度计数器
       int starIndex = -1;
       int match = 0;//加上match是因为*可以匹配null,但是?只能匹配单个字符
       while(len1 < s.length()){
           if(len2 < p.length() && (p.charAt(len2) == '?' || (s.charAt(len1) != '*' &&s.charAt(len1) == p.charAt(len2)))){
               len1++;
               len2++;
           }else if(len2 < p.length() && p.charAt(len2) == '*'){
               starIndex = len2;
               match = len1;
               len2++;
           }else if(starIndex != -1){
               len2 = starIndex + 1;
               match++;
               len1 = match;
           }else{
               return false;
           }
       }

       while(len2 < p.length() && p.charAt(len2) == '*'){
           len2++;
       }
       return len2 == p.length();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值