LeetCode-10
Regular Expression Matching : Given an input string s and a pattern p, implement regular expression matching
note : The matching should cover the entire input string (not partial).
Answer
:::python
class Solution:
def isMatch(self, s: str, p: str) -> bool:
if len(re.findall(p,s))>0:
return s == re.findall(p,s)[0]
else:
return False
Result : 201ms Memory: 13.9mb
Solve
:::python
class Solution:
def isMatch(self, s: str, p: str) -> bool:
i, j = len(s) - 1, len(p) - 1
return self.backtrack({}, s, p, i, j)
def backtrack(self, cache, s, p, i, j):
key = (i, j)
if key in cache:
return cache[key]
if i == -1 and j == -1:
cache[key] = True
return True
if i != -1 and j == -1:
cache[key] = False
return cache[key]
if i == -1 and p[j] == '':
k = j
while k != -1 and p[k] == '':
k -= 2
if k == -1:
cache[key] = True
return cache[key]
cache[key] = False
return cache[key]
if i == -1 and p[j] != '':
cache[key] = False
return cache[key]
if p[j] == '':
if self.backtrack(cache, s, p, i, j - 2):
cache[key] = True
return cache[key]
if p[j - 1] == s[i] or p[j - 1] == '.':
if self.backtrack(cache, s, p, i - 1, j):
cache[key] = True
return cache[key]
if p[j] == '.' or s[i] == p[j]:
if self.backtrack(cache, s, p, i - 1, j - 1):
cache[key] = True
return cache[key]
cache[key] = False
return cache[key]
Result : 198ms Memory: 14mb
์ ๊ท์์ ๋ฌธ์์ด ํจํด์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฌธ์์ด์ด๋ฉฐ, Python ๋ฐ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฌธ์์ด์ ์ผ๋ถ ๋๋ ์ ์ฒด์ ์ผ์นํ๋ ํจํด์ ์ฐพ์ ์ ์์ต๋๋ค.
์ ๊ท์์ ๋ฌธ์, ๋ฉํ ๋ฌธ์ ๋ฐ ํน์ ๋ฌธ์์ ์กฐํฉ์ผ๋ก ํํ๋ฉ๋๋ค. ๋ฉํ ๋ฌธ์๋ ํน๋ณํ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ ํน์ ๋ฌธ์๋ ๋ฌธ์ ๊ทธ๋๋ก ํด์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, "a"๋ ๋ฌธ์ a์ ์ ํํ ์ผ์นํ๊ณ "."์ ์ด๋ค ๋ฌธ์์ ์ผ์นํฉ๋๋ค.
Regular Expression Matching์ ๋ฌธ์์ด์ด ์ ๊ท์ ํจํด๊ณผ ์ผ์นํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ํ๋ก์ธ์ค์ ๋๋ค. ์ด๋ฅผ ์ํํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ re ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. re ๋ชจ๋์ ์ ๊ท์์ ํจํด์ผ๋ก ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๊ณ ์ผ์นํ๋ ํจํด์ ์ฐพ์ ์ ์์ต๋๋ค.
๊ฐ๋จํ ์๋ก, "hello"์ ์ผ์นํ๋ ๋ฌธ์์ด์ ์ฐพ์ผ๋ ค๋ฉด ํจํด "hello"๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ ๋ค๋ฅธ ์๋ก, ํจํด "[a-z]+"๋ ๋ฌธ์์ด๊ณผ ์ผ์นํ๋ ๋ชจ๋ ์๋ฌธ์ ์ํ๋ฒณ์ ํฌํจํฉ๋๋ค.
์ ๊ท์์ผ๋ก ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ฉด ๋ฌธ์์ด์์ ํน์ ํจํด์ ์ฐพ์ ์ ์์ต๋๋ค. ์ด๋ฅผ ํ์ฉํด ๋ฌธ์์ด์์ ํน์ ๋จ์ด๋ ๋งค์น๋๋ ๋ฌธ์์ด์ ์ฐพ๊ฑฐ๋ ํจํด์ ๋ง๋ ๋ฌธ์์ด์ ๋์ฒดํ๊ฑฐ๋ ์ถ์ถํ ์ ์์ต๋๋ค.
'๐ข One step' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[leetcode-14] Longest Common Prefix (0) | 2023.04.24 |
---|---|
[leetcode-12] Integer to Roman (0) | 2023.04.21 |
[leetcode-8] String to Integer (atoi) (0) | 2023.04.19 |
[leetcode-6] Zigzag Conversion (0) | 2023.04.18 |
[leetcode-7] Reverse Integer (0) | 2023.04.16 |