LCS(최장 공통 부분 수열)을 이용해 -> 원래 문자열과 뒤집은 문자열 비교
전체개수(n)-LCS길이(dp[-1][-1])
import sys
input=sys.stdin.readline
n=int(input())
m=list(input().strip())
reverse_m=m[::-1]
dp=[[0]*(n+1) for _ in range(n+1)]
for i in range(1,n+1):
for j in range(1,n+1):
if m[i-1]!=reverse_m[j-1]:
dp[i][j]=max(dp[i][j-1], dp[i-1][j])
else:
dp[i][j]=dp[i-1][j-1]+1
print(n-dp[-1][-1])
'알고리즘' 카테고리의 다른 글
C++ (0) | 2022.10.28 |
---|---|
[백준 알고리즘] 1213번 팰린드롬 만들기. 파이썬(python) (0) | 2022.10.26 |
[백준 알고리즘] 16170번 오늘의 날짜는?. 파이썬(python)/timedelta (0) | 2022.10.25 |
[백준 알고리즘] 2948번 2009년. 파이썬(python/요일 계산하기 (0) | 2022.10.25 |
비밀번호 설정/ re모듈 사용/ 정규표현 (0) | 2022.10.22 |