회문
🤔 접근
- 두 개의 포인터로 하나는 앞에서부터, 하나는 뒤에서부터 탐색하며 두 포인터가 가리키는 값이 다를 때까지 탐색한다.
- 만약 다르다면, 왼쪽을 하나 삭제하였을 때 회문인지 확인한다. 참이라면 유사회문이다.
- 2가 False라면, 오른쪽을 하나 삭제하였을 때 회문인지 확인한다. 참이라면 유사회문이다.
- 3이 False라면 회문이 아니다.
💻 코드
import sys
def palindrome(s, res):
sp, ep = 0, len(s)-1
while sp < ep:
if s[sp] == s[ep]:
sp += 1
ep -= 1
elif not res:
if palindrome(s[sp+1:ep+1], 1) == 0:
return 1
elif palindrome(s[sp:ep], 1) == 0:
return 1
else:
return 2
else:
return 2
return 0
n = int(sys.stdin.readline())
res = []
for _ in range(n):
s = list(sys.stdin.readline().rstrip())
res.append(palindrome(s, 0))
for i in res:
print(i)