[LeetCode] 와일드카드 매칭 어댑터 구현의 귀속

6110 단어
leetcode 이 문제 재미있어요. 어댑터 구현,'?'임의의 문자열 일치,'*'임의의 길이 문자열 일치, 저녁에 시도해 보았습니다. 제목은 다음과 같습니다.
 
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).

The function prototype should be:
bool isMatch(const char *s, const char *p)

Some examples:
isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "*") → true
isMatch("aa", "a*") → true
isMatch("ab", "?*") → true
isMatch("aab", "c*a*b") → false
 , , false, , 1, , 。
* , , * isMatch * 。 :
class Solution {
public:
    bool isMatch(const char *s, const char *p) {
        if ('\0' == *s && '\0' == *p)
        {
            return true;
        }
        if ('*' == *s)
        {
            return asteriskMatch(s, p);
        }
        if ('*' == *p)
        {
            return asteriskMatch(p, s);
        }
        if (*s == *p || '?' == *s || '?' == *p)
        {
            s++;
            p++;
            return isMatch(s, p);
        }
        else
        {
            return false;
        }
    }
private:
    bool asteriskMatch(const char *asterisk, const char *p)
    {
        asterisk++;
        if ('*' == *asterisk)
        {
            return asteriskMatch(asterisk, p);
        }
        while (*p != '\0')
        {
            if (isMatch(asterisk, p))
            {
                return true;
            }
            p++;
        }
        if ('\0' == *asterisk && '\0' == *p)
        {
            return true;
        }
        return false;
    }
};

이렇게 코드를 실현하는 것은 비교적 상쾌하지만 *의 판단 효율이 현저히 높지 않다. 제출, 역시 Time Limit Exceeded.통과되지 않은 용례는 다음과 같다.
Last executed input:
"abbabaaabbabbaababbabbbbbabbbabbbabaaaaababababbbabababaabbababaabbbbbbaaaabababbbaabbbbaabbbbababababbaabbaababaabbbababababbbbaaabbbbbabaaaabbababbbbaababaabbababbbbbababbbabaaaaaaaabbbbbaabaaababaaaabb", "**aa*****ba*a*bb**aa*ab****a*aaaaaa***a*aaaa**bbabb*b*b**aaaaaaaaa*a********ba*bbb***a*ba*bb*bb**a*b*bb"
동적 기획이나 욕심법으로 바꿔야 하는데 자꾸 귀속으로 하는 게 우아하다고 생각해요. 그리고 Discuss에서 DP를 많이 쓰는 것도 TLE예요. 안 돼요. 너무 졸려요. 내일 고쳐요.
 
 
다음으로 전송:https://www.cnblogs.com/yezhangxiang/p/3915900.html

좋은 웹페이지 즐겨찾기