1class Solution:2def palindromePartition(self, s: str, t: int) -> int:3n = len(s)45@lru_cache(None)6def is_palin(7s,8): # This function returns min no of chars to change to make s as a palindrome9cnt = 010for c1, c2 in zip(s, s[::-1]):11if c1 != c2:12cnt += 113if len(s) % 2 == 0:14return cnt // 215return (cnt + 1) // 21617@lru_cache(None)18def dp(i, j, k): # We analyse string s[i:j+1] with k divisions left19if j == n:20return 0 if k == 0 else sys.maxsize21if k == 0:22return sys.maxsize23ans = sys.maxsize24cnt = is_palin(s[i : j + 1])25# terminate here26ans = min(ans, dp(j + 1, j + 1, k - 1) + cnt)27# dont terminate28ans = min(ans, dp(i, j + 1, k))29return ans3031return dp(0, 0, t)