给你一个字符串 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);
}
}