常规思路
class Solution {
public boolean isMatch(String s, String p) {
int lne1=s.length(),len2=p.length(),i=0,flag=1;
char[] arr1=s.toCharArray(),arr2=p.toCharArray();
StringBuilder res=new StringBuilder();
while((arr2[i]!='.'||arr2[i]!='*'))
{
i++;
res.append(arr2[i]);
}
if(arr2[i]=='.')
{
if(arr[i+1]=='*')
return true;
else
{
}
}
else if(arr2[i]=='*')
{
}
}
}
但是感觉不太对
然后后续尝试了递归
因为其实看起来这个东西用递归能有奇效
class Solution {
public boolean isMatch(String s, String p) {
if (p.isEmpty())
return s.isEmpty();
boolean first_match = (!s.isEmpty()) &&
(s.charAt(0) == p.charAt(0) || p.charAt(0) == '.');
if (p.length() >= 2 && p.charAt(1) == '*') {
// 第一种情况:忽略 '*' 前的字符 (即跳过模式中的前两个字符)
// 第二种情况:前一个字符匹配上,并继续匹配剩下的字符串
return isMatch(s, p.substring(2)) ||
(first_match && isMatch(s.substring(1), p));
} else {
// 如果没有 '*',直接匹配下一个字符
return first_match && isMatch(s.substring(1), p.substring(1));
}
}
}
看具体逻辑
特殊情况如果p为空,那么就看s是否为空
如果为空说明false,如果为正那么说明为true
首先看第一个p的第一个字符是否和s相匹配
如果匹配那么再看第二个,但是这个时候要注意
那效率太低了看看还有什么方法