😕1216 valid palindrome III

https://leetcode.com/problems/valid-palindrome-iii/

首先是要转换思路想到是找多少次delete能让string变成palindrome,然后就类似edit distance了,dp用来记录i - j的字符串需要多少次delete,有点可惜自己没想出来

class Solution {
    public boolean isValidPalindrome(String s, int k) {
        int n = s.length();
        // dp[i][j] is the number of chars deleted to 
        // make subsequence from i to j valid palindrome
        int[][] dp = new int[n][n];
        // len should be the outer loop!!!!!
        for (int len = 1; len < n; len++) {
            for (int i = 0; i + len < n; i++) {
                int j = len + i;
                char ch1 = s.charAt(i);
                char ch2 = s.charAt(j); 
                if (len == 1) {
                    dp[i][j] = ch1 == ch2 ? 0 : 1;
                } else if (ch1 == ch2) {
                    dp[i][j] = dp[i + 1][j - 1];
                } else {
                    dp[i][j] = 1 + Math.min(dp[i + 1][j], dp[i][j - 1]);
                }
                
            }
        }
        return dp[0][n - 1] <= k;
    }
}

Last updated