标签:pre fas second star div not lan seq while
Given an input string (s
) and a pattern (p
), implement wildcard pattern matching with support for ‘?‘
and ‘*‘
.
‘?‘ Matches any single character. ‘*‘ Matches any sequence of characters (including the empty sequence).
The matching should cover the entire input string (not partial).
Note:
s
could be empty and contains only lowercase letters a-z
.p
could be empty and contains only lowercase letters a-z
, and characters like ?
or *
.Example 1:
Input: s = "aa" p = "a" Output: false Explanation: "a" does not match the entire string "aa".
Example 2:
Input: s = "aa" p = "*" Output: true Explanation: ‘*‘ matches any sequence.
Example 3:
Input: s = "cb" p = "?a" Output: false Explanation: ‘?‘ matches ‘c‘, but the second letter is ‘a‘, which does not match ‘b‘.
Example 4:
Input: s = "adceb" p = "*a*b" Output: true Explanation: The first ‘*‘ matches the empty sequence, while the second ‘*‘ matches the substring "dce".
Example 5:
Input: s = "acdcb" p = "a*c?b" Output: false
AC code:
class Solution { public: bool isMatch(string s, string p) { int sp = 0; int pp = 0; int match = 0; int start = -1; while (sp < s.length()) { if (pp < p.length() && (s[sp] == p[pp] || p[pp] == ‘?‘)) { sp++; pp++; } else if (pp < p.length() && p[pp] == ‘*‘) { start = pp; match = sp; pp++; } else if (start != -1) { pp = start + 1; match++; sp = match; } else return false; } while (pp < p.length() && p[pp] == ‘*‘) { pp++; } return pp == p.length(); } };
Runtime: 24 ms, faster than 88.38% of C++ online submissions for Wildcard Matching.
标签:pre fas second star div not lan seq while
原文地址:https://www.cnblogs.com/ruruozhenhao/p/9800505.html