Java LeetCode 10. 正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。
‘.’ 匹配任意单个字符
'
’ 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
示例 1:
输入:s = “aa” p = “a”
输出:false
解释:“a” 无法匹配 “aa” 整个字符串。
示例 2:
输入:s = “aa” p = "a
"
输出:true
解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 ‘a’。因此,字符串 “aa” 可被视为 ‘a’ 重复了一次。
*

使用递归,对两个字符串每一层进行比较
每一次比较有两种情况

第一种情况,没有*号,这种情况如果两个字符相同或者存在’.'符号,则可以直接返回true

第二种情况,下一个字符是’*'号,则该符号可以表示替代0个或者无数个,如果0个的话,就判断right的下两个和Left的关系,如果是无数个,就判断left+1和当前right比较

class Solution {
    
    
    public boolean isMatch(String s, String p) {
    
    
        return iss(s,0,p,0);
    }
    public boolean iss(String s,int left,String p,int right){
    
    
        if(p.length()==right){
    
    
            return left==s.length();
        }

        boolean isMatch = left<s.length()&&(s.charAt(left)==p.charAt(right)||p.charAt(right)=='.');

        if(right<=p.length()-2&&p.charAt(right+1)=='*'){
    
    
            return iss(s,left,p,right+2)||(isMatch&&iss(s,left+1,p,right));
        }

        return isMatch&&iss(s,left+1,p,right+1);
    }
}

猜你喜欢

转载自blog.csdn.net/sakura_wmh/article/details/113100513
今日推荐