๋ฌธ์ ๋งํฌ
https://leetcode.com/problems/valid-palindrome/
neetcode ์์์ two pointers๋ก ๋ถ๋ฅ๋์ด ์๋ ๋ฌธ์ ์ด๋ค.
1์ฐจ ํ์ด
๋ฌธ์ ๋ฅผ ์ ์ฝ์ด๋ณด๋ฉด, removing all non-alphanumeric characters ๋ผ๋ ๋ง์ด ๋ณด์ธ๋ค.
์ํ๋ฒณ์ด ์๋ ๋ฌธ์๋ค์ ๊ฑธ๋ฌ์ค์ผ ํ๋ค. ์ด ๋ถ๋ถ์ isalnum ํจ์๋ฅผ ํตํด์ ํด๊ฒฐํ๋ค.
์ฐธ๊ณ ๋ก, isalnum ์ ์ํ๋ฒณ๊ณผ ์ซ์๋ฅผ ํ์ฉํ๊ณ , isalpha๋ ์ํ๋ฒณ๋ง ํ์ฉํ๋๋ฐ, ๋ฌธ์ ์์์๋ ์ํ๋ฒณ๊ณผ ์ซ์๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์ isalnum์ ์ฌ์ฉํด์ผ ํ๋ค.
- isalnum : https://zetawiki.com/wiki/%ED%8C%8C%EC%9D%B4%EC%8D%AC_isalnum()
- isalpha : https://zetawiki.com/wiki/%ED%8C%8C%EC%9D%B4%EC%8D%AC_isalpha()
class Solution(object):
def isPalindrome(self, s):
testString = []
for c in s:
if c.isalnum():
testString.append(c.lower())
for i,c in enumerate(testString):
if c != testString[-i-1]:
return False
return True
2์ฐจ ํ์ด (ํด์ค ์ฐธ๊ณ )
https://www.youtube.com/watch?v=jJXJ16kPFWg
์ฒซ๋ฒ์งธ๋ก ํด์ค๊ฐ์ข์์ ์ ๊ณตํด์ฃผ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ด ์ฒซ๋ฒ์งธ ํ์ด์ ์ ์ฌํ์ง๋ง, array ๋์ ์คํธ๋ง์ผ๋ก ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์กฐ๊ธ ๊ด์ฌ์๊ฒ ๋ณผ๋งํ ๋ถ๋ถ์ newStr == newStr[::-1] ํตํด์ array ๋ฐฐ์ด ๊ฐ ๊ฒ์ฌ๋ฅผ ํ ๊ฒ. ํ์ด์ฌ์์๋ array ์์ฒด๋ฅผ ๋น๊ต๊ฐ๋ฅํ๋ค.
newStr = ""
for c in s:
if c.isalnum():
newStr += c.lower()
return newStr == newStr[::-1]
๋ค์์ผ๋ก ์ ๊ณตํด์ฃผ๋ ๋ฐฉ๋ฒ์ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๊ณ ํธ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ๋ฒ์ด๋ค.
while๋ฌธ ์์ while ๋ฌธ์ ์ฐ๋ ๋ญ๊ฐ ์ผํ ๋ ์ฐ๋ฉด ์๋ผ๋ ๋ฐฉ์์ด๋ผ, ์๊ณ ๋ฆฌ์ฆ์ด๋๋ผ๋ ์์ด ์๊ฐ๋ค.
ํ์ง๋ง, ๋ด๊ฐ ์ ์ถํ๋ ํ์ด ์ค์์, ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ์ฅ ์ ๊ฒ ์ฐ์ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
l, r = 0, len(s) -1
while l < r:
while l < r and not self.alphaNum(s[l]):
l += 1
while r > l and not self.alphaNum(s[r]):
r -= 1
if s[l].lower() != s[r].lower():
return False
l, r = l + 1, r - 1
return True
def alphaNum(self, c):
return (
ord('A') <= ord(c) <= ord('Z') or
ord('a') <= ord(c) <= ord('z') or
ord('0') <= ord(c) <= ord('9')
)
'๊ฐ๋ฐ > ๐ค ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[leetcode] 15. 3Sum ํ์ด, ํด์ค (python) (0) | 2023.10.28 |
---|---|
[leetcode] 167. Two Sum II - Input Array Is Sorted ํ์ด, ํด์ค (python) (1) | 2023.10.24 |
[leetcode] 128. Longest Consecutive Sequence ์๊ฐ๋ณต์ก๋ O(n) ํ์ด, ํด์ค (python) (0) | 2023.10.21 |
[leetcode] 36. Valid Sudoku ํ์ด, ํด์ค (python) (0) | 2023.10.18 |
[leetcode] 49. Group Anagrams ํ์ด, ํด์ค (python) (2) | 2023.10.14 |