同样是一道贪心的题目。但是我首次写的代码是用的回溯,结果超时了。问题可能就出在这个回溯上。所以就写了一个数组表示的。AC。
class Solution {
public:
bool isMatch(string s, string p) {
int presp,press;
bool flag = false;
int i,j;
i=j=0;
while(i<s.size())
{
if(p[j]=='?'){i++;j++;}
else if(p[j]=='*'){
presp = ++j;
press = i;
flag = true;
}else{
if(s[i]==p[j]){i++;j++;}
else if(flag){
j = presp;
i = (++press);
}else return false;
}
}
while(p[j]=='*')j++;
return j==p.size();
}
};我再把超时的贴上:
class Solution {
public:
bool isMatch(string s, string p) {
if(s.empty())
{ if(p[0]=='*'&&p.find_first_not_of('*',1)==string::npos)return true;
return p.empty();
}
if(p[0]=='*')
{
while(!s.empty())
{
if(isMatch(s.substr(0,s.size()),p.substr(1,p.size()-1)))return true;
s=s.substr(1,s.size()-1);
}
return isMatch(s,p.substr(1,p.size()-1));
}
else if((!s.empty()&&p[0]=='?')||s[0]==p[0])
{
return isMatch(s.substr(1,s.size()-1),p.substr(1,p.size()-1));
}
return false;
}
};

本文介绍了一种使用贪心算法解决字符串匹配问题的方法,并对比了回溯法与贪心法的不同表现。通过具体实现展示了如何避免超时问题,提高算法效率。
2710

被折叠的 条评论
为什么被折叠?



