LeetCode 44. Wildcard Matching

来源:互联网 发布:黄金家族软件 编辑:程序博客网 时间:2024/04/27 18:02

同样是一道贪心的题目。但是我首次写的代码是用的回溯,结果超时了。问题可能就出在这个回溯上。所以就写了一个数组表示的。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;    }};


0 0
原创粉丝点击