标签:boolean 动态 label bool 记录 pre 结束 while 正确答案
这题好难。自己没想到用动态规划,敲了很久,敲出了可以通过400个测试点的代码,还是有一些情况没有考虑到。不舍得删,记录一下。对输入用例
"aaa"
"abac*a"
不能给出正确答案。
class Solution {
public boolean isMatch(String s, String p) {
char[] ss=s.toCharArray();
char[] pp=p.toCharArray();
int i=ss.length-1;
int j=pp.length-1;
boolean label=false;//false表示没遇到*,或者说是*的作用无效时
while(i>=0&&j>=0){
if(ss[i]==pp[j]||pp[j]==‘.‘)//匹配时
{
i--;
if(!label)//*没有发挥作用时
j--;
}
else if(label){//第一次不匹配时,if有*起作用
label=false;
j--;
}
else if(pp[j]==‘*‘){
label=true;//label发挥作用,j-1后j不能再动,除非失效了
j--;
}
else//既没有*号起作用,又不匹配,结束循环
break;
}
if(i>=0)
return false;
else {//j>=0
while(j>=0){
if(label){
label=false;
j--;
}
else if(pp[j]==‘*‘){
label=true;
j--;
}
else//label失效且不是*
return false;
}
}
return true;
}
}```
标签:boolean 动态 label bool 记录 pre 结束 while 正确答案
原文地址:https://www.cnblogs.com/wsshub/p/14534080.html