[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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.