1) 유효한 팰린드롬
주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.
우선 위 문제에서 팰린드롬이란 앞에서 읽어도 이효리 거꾸로 읽어도 이효리를 떠올리면 될 것이다.
즉 같은 단어에 앞뒤로 읽어도 같은 의미이며
위 문제에서는 주어진 조건이 우선 대소문자 구분을 하지 않고,
영문자와 숫자만을 대상으로 하기에
특수문자와 영문자가 아닌 것들은 걸러줘야한다.이 부분에서 pop을 사용할수도 있고 내장 함수인 reverse를 활용할 수도 있다!.
"""
주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.
ex) "abba" -> True
"bbac" -> False
"""
###pop 방식
def isPalindrome(self, s: str) -> bool:
strs = []
#입력 받은 배열에 대하여 안의 원소들에 있어서 .isalnum()을 통하여 글자와 숫자만 새로운 배열 strs에 append하는데
for char in s:
if char.isalnum():
strs.append(char.lower()) ### 소문자로 치환해서 append 해주는 것이다(문제의 조건)
### strs 배열을 다 둘러봤을 때 맨 앞과 맨 뒤를 확인하기 위해서 pop을 사용하였고 위 과정이 중간에 걸린다면 false를 도출하도록 설계
while len(strs) > 1:
if strs.pop(0) != strs.pop():
return False
### while 안의 if문에서 걸리지 않을 시, 팰린드롬이기에 return을 True로 하였다.
return True
### reverse 방식
def isPalindrome(self, s: str) -> bool:
##valid_list에 for문 사용 그런데 i의 lower를 넣는 것이고 if문을 사용하여 i가 isalnum일때만 작동하여 위 리스트에 들어간다
valid_list = [i.lower() for i in s if i.isalnum()]
## 새로운 배열 rev_valid_list를 만들어 valid_list의 뒤에서부터 넣어준다
rev_valid_list = valid_list[::-1]
###같으면 True, 틀리면 False를 반환하여 팰린드롬임을 확인할 수 있다.
return valid_list == rev_valid_list
leetcode 링크 : https://leetcode.com/problems/valid-palindrome
leetcode 125