https://leetcode.com/problems/valid-palindrome/description/
문제 분석
주어진 문자열이 유효한 Palindrome인지 구하는 문제입니다.
처음 시도한 답안
class Solution:
def isPalindrome(self, s: str) -> bool:
s = s.lower()
left = 0
right = len(s) - 1
while left < right:
while not s[left].isalnum() and left < right:
left += 1
while not s[right].isalnum() and left < right:
right -= 1
if s[left] != s[right]:
return False
left += 1
right -= 1
return True
접근 방법
- 먼저 문자열을 모두 소문자로 변경합니다.
- 가장 왼쪽에서 시작하는 left, 오른쪽에서 시작하는 right 변수를 선언합니다.
- left 포인터가 right보다 커지기 전까지 반복합니다.
- 등장한 문자가 숫자거나 알파벳이 될때까지 left를 오른쪽으로 1칸 움직입니다. (숫자나 알파벳 이외엔 모두 무시, 공백등)
- 마찬가지로 오른쪽 포인터도 숫자이거나 알파벳이 나올때까지 right를 왼쪽으로 1칸 움직입니다.
- 만약 등장한 두 문자가 다르다면 Palindrome이 아닙니다.
- 등장한 문자가 같다면 left+1, right-1 하여 포인터를 움직입니다.
Palindrome을 검사하는 방법으로 왼쪽, 오른쪽 투 포인터 방식을 사용합니다. 각 포인터를 하나씩 옮기면서 등장한 문자가 같은지 비교하는 방법입니다.
728x90
'SW개발 > 코딩테스트' 카테고리의 다른 글
[LeetCode]Count Sub Islands (0) | 2024.04.11 |
---|---|
[LeetCode]Max Area of Island (0) | 2024.04.10 |
[LeetCode]Course Schedule (0) | 2024.04.08 |
[LeetCode]Number of Islands (0) | 2024.04.07 |
[LeetCode]Clumsy Factorial (0) | 2024.04.06 |