주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.
Example 1:Input: s = "A man, a plan, a canal: Panama" Output: true Explanation: "amanaplanacanalpanama" is a palindrome.
Example 2:
Input: s = "race a car" Output: false Explanation: "raceacar" is not a palindrome.
2차
1. 데이터 클렌징해서(영문자, 숫자, 소문자) 쭉 한 줄로 만들기. a라고 하자.
2. 비교 대상(반대부터 적혀진거)을 b = str[-1::] 라고 하면 땡. str[::-1]
3. if a != b
print("false")
1차
[접근 고민] 30분 하자. 7시 20분까지.
- Input으로 문자열 s가 주어질거야.
-> (1) 다 소문자로 바꿔주자.
(2) 특수 기호 없애주고
(3) 공백도 없애주자
-> (4) 새롭게 만들어진 s를 / 뒤집은걸 새로운 변수로 t라고 해보자. (파이썬 뒤집기 사용. [:-1])
이 둘이 같으면 -> true, 다르면 -> false 라고 해주면 될 것 같은데.
// 지금 시각 6시 54분. ("할 수 있어")
[코드 짜기] 15분만 해보자. 모르면 모르는거임 코드 짜는건. 7시 10분까지.
- 문법들 검색을 허함 (대소문자 변환 등)
내 생각으로 짜본 나의 코드.
s = str(input())
s = s.lower()
s.replace(", , : ", " ")
s.replace(" ", "")
t = s[::-1]
if t == s:
print("true")
else:
print("false")
-> 되는데....?
-> 아... 간단한건 되는데 문제 속 panama 문장 넣어보니 안되네ㅠ
[올바른 코드를 확인해보자]
def isPalindrome(self, s:str) -> bool:
strs=[]
for char in s:
if char.isalnum():
strs.append(char.lower())
while len(strs)>1:
if strs.pop(0) != strs.pop():
return False
return True
from collections import deque
def isPalindrome(self, s:str) -> bool:
strs:Deque = collections.deque()
for char in s:
if char.isalnum():
strs.append(char.lower())
while len(strs)>1:
if strs.pop(0) != strs.pop():
return False
return True
3번째줄은 오류 - 임포트가 왜 안되징
import re
def isPalindrome(self, s:str) -> bool:
s = s.lower()
s = re.sub('[^a-z0-9]', '', s)
return s == s[::-1]
cf) 정규 표현식 - https://wikidocs.net/1642
cf) 문자 클래스([ ]) 안에는 어떤 문자나 메타 문자도 사용할수 있지만 주의해야 할 메타 문자가 1가지 있다. 그것은 바로 ^인데, 문자 클래스 안에 ^ 메타 문자를 사용할 경우에는 반대(not)라는 의미를 갖는다. 예를 들어 [^0-9]라는 정규 표현식은 숫자가 아닌 문자만 매치된다.
cf) re.sub - https://dojang.io/mod/page/view.php?id=2438
리트코드 49. 그룹 애너그램 (파이썬) (0) | 2021.09.10 |
---|---|
리트코드 819. 가장 흔한 단어 (파이썬) - ✍️2차 할 차례 (0) | 2021.09.08 |
리트코드 937. 로그파일 재정렬 (파이썬) (0) | 2021.09.02 |
리트코드 344. 문자열 뒤집기 (파이썬) (0) | 2021.09.02 |