√ Accepted
√ 1809/1809 cases passed (76 ms)
√ Your runtime beats 44.13 % of cpp submissions
√ Your memory usage beats 11.54 % of cpp submissions (24.3 MB)
class Solution {
public:
bool isMatch(string s, string p) {
string state = "";
queue<int> q;
int flag = 1;
for (int i = 0; i < p.size(); i++)
{
if(p[i] != '*')
{
state = state + p[i];
flag = 1;
}
else
{
if(flag == 1)
{
state = state + '-' + '+';
flag = 0;
}
}
}
state = state + '.';
vector<int> v(state.size());
q.push(0);
v[0] = 1;
int temp1 = 0;
while(state[temp1] == '-')
{
q.push(temp1+1);
v[temp1+1] = 1;
q.push(temp1+2);
v[temp1+2] = 1;
temp1 = temp1 + 2;
}
int temp = 0;
queue<int> qTemp;
for (int i = 0; i < s.size(); i++)
{
temp = q.size();
for (int j = 0; j < temp; j++)
{
if(state[q.front()] == s[i] || state[q.front()] == '?' || state[q.front()] == '+')
{
if(state[q.front()] == '+')
{
temp1 = q.front();
q.push(temp1);
q.pop();
}
else
{
temp1 = q.front()+1;
if(state[temp1] == '.' && i == s.size()-1)
{
return true;
}
q.push(temp1);
v[temp1] = 1;
q.pop();
v[temp1-1] = 0;
}
while (temp1 < state.size() && (state[temp1] == '-' || state[temp1] == '+'))
{
if(state[temp1+1] == '.' && i == s.size()-1 )
{
return true;
}
qTemp.push(temp1 + 1);
temp1++;
}
}
else
{
v[q.front()] = 0;
q.pop();
}
}
temp = qTemp.size();
for(int j = 0; j < temp; j++)
{
if(v[qTemp.front()] == 0)
{
q.push(qTemp.front());
v[qTemp.front()] = 1;
}
qTemp.pop();
}
}
temp = q.size();
for (int j = 0; j < temp; j++)
{
if(s.size() == 0 && state[q.front()] == '.')
{
return true;
}
q.pop();
}
return false;
}
};
leetcode-hard记录44. Wildcard Matching
最新推荐文章于 2022-06-22 12:51:01 发布