1. 문제
2. 나의 풀이
- 문자의 길이가 20만이라서 O(n) 복잡도로 풀어도 괜찮다고 판단
- 문자열을 소문자로 변경하고, 문자/숫자가 아닌 것은 제거
* 소문자는 아스키 48번부터 57번까지
- A와 B를 비교해서 다르면 false
* A는 문자열 시작에서 0번째 문자
- 문자열의 중간까지 계속해서 비교하고 다른 경우가 없으면 true를 리턴
class Solution(object):
def getRefineCharacters(self, s):
lower_alphabets = [x for x in range(48, 57+1)]
numbers = [x for x in range(97, 122+1)]
return list(filter(lambda x: ord(x) in lower_alphabets or ord(x) in numbers , s.lower()))
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
refinedString = self.getRefineCharacters(s)
if len(refinedString) <= 1:
return True
for i in range(0, len(refinedString)//2):
start_index = i
end_index = len(refinedString)-i-1
if refinedString[start_index] != refinedString[end_index]:
return False
return True
3. 남의 풀이