ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Leetcode10 Regular Expression Matching

2022-05-01 16:33:44  阅读:154  来源: 互联网

标签:字符 return charAt Leetcode10 substring Regular isMatch false Expression


 

 

这道题的题意是,给出一个字符串s和匹配串P。判断两个串是否匹配。特殊的是p串中会有. 和 *。.表示可以代替任意字符,*则是可以重复前面的字符任意次(0次也可以)
大体上思路就是,对于p的一个*,比如说是a*,我们要搞明白这在s串中对应了究竟几个a。然后我们需要把匹配上的字符在原本的字符串中划掉,再跑身下的字符串,也就是递归。
这个思路是以*为基础。把*和前面一个字符在p中当作一个整体,看匹配的s中多少个对应前面的字符。

考虑到递归,就要考虑最终情况。
如果p为空,则S为空则true,s不为空则false。
如果p长度为1,那么只有s长度为1且和p这一位相同才返回true,否则false。
如果p长度不是1,那么分两种情况:
第一种,当前两位不是一个字符+*,那么就比较s和p最前面一位,如果一样就递归s、p个删去最前面一位的,不一样返回false。比如s是abc,p是acd,因为第一位一样,就接着比较bc和cd就好了。
第二种,p的前两位是一个字符+*。这种情况下,我们可以删去s前任意位p星号前的字符。比如说s是aaaaaab,p前两位是a*,那么s前面几个a都要删掉。
当然,删掉任意数量的a都需要枚举,比如会出现如下情况:s是aaaaab,p是a*aab,那么你不能看到a*就把a全删了,所以要递归删任何数量a的情况。
public class Le10 {
    public boolean isMatch(String s, String p) {
        if(p.isEmpty())  return s.isEmpty();//如果p为空,那么s必须是空的
        if(p.length()==1)  return s.length()==1 && (p.charAt(0)=='.' || p.charAt(0)==s.charAt(0));//第一位字符进行比较
        if(p.charAt(1)!='*'){
            if(s.isEmpty())  return false;
            else return (p.charAt(0)=='.' || p.charAt(0)==s.charAt(0)) && isMatch(s.substring(1),p.substring(1));
        }
        while(!s.isEmpty() && (p.charAt(0)=='.' || p.charAt(0)==s.charAt(0))){
            if(isMatch(s,p.substring(2)))  return true;
            s=s.substring(1);
        }
        return isMatch(s,p.substring(2));
    }
    public static void main(String[] args){
        Le10 test = new Le10();
        System.out.println(test.isMatch("aab","c*a*b"));
    }
}

 

 
 

标签:字符,return,charAt,Leetcode10,substring,Regular,isMatch,false,Expression
来源: https://www.cnblogs.com/dijkstra2003/p/16213140.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有