WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Dynamic Programming · Expert · question 65 of 100

How can dynamic programming be applied to solve the K-Palindrome problem? Implement the solution.?

📕 Buy this interview preparation book: 100 Dynamic Programming questions & answers — PDF + EPUB for $5

The K-Palindrome problem is a variant of the classic palindrome problem, where instead of finding whether a string is a palindrome or not, we need to find if a string can be converted into a palindrome by changing at most k characters.

Dynamic programming is an excellent approach to solve problems like this because it allows us to break down the larger problem into smaller subproblems and reuse the precomputed results multiple times.

Here’s an approach to solve the K-Palindrome problem using dynamic programming:

1. We first define a two-dimensional array ‘dp[][]‘, where ‘dp[i][j]‘ represents whether the substring from index ‘i‘ to index ‘j‘ of the given string is a palindrome or not.

2. We then initialize the diagonal elements of the array to 1, as every substring of length 1 is a palindrome.

3. Next, we iterate through the array to fill in the remaining elements, starting with the substrings of length 2 and increasing the length for each iteration.

4. While iterating, we compare the characters at the start and end of the substring. If they are the same, we check whether the substring ‘dp[i+1][j-1]‘ is a palindrome or not, and set ‘dp[i][j]‘ accordingly.

5. If the characters at the start and end of the substring are different, we take the minimum of ‘dp[i+1][j]‘ and ‘dp[i][j-1]‘ and add 1. This is because, since we can only modify at most k characters to make it a palindrome, we need to keep track of the number of modifications we make as we go along.

6. Finally, if ‘dp[0][n-1] <= 2*k‘, where ‘n‘ is the length of the input string, we can say that the string can be converted into a palindrome by changing at most k characters.

Here’s the Java code that implements this algorithm:

public static boolean isKPalindrome(String s, int k) {
    int n = s.length();
    int[][] dp = new int[n][n];

    for (int i = 0; i < n; i++) {
        dp[i][i] = 1;
    }

    for (int len = 2; len <= n; len++) {
        for (int i = 0; i <= n - len; i++) {
            int j = i + len - 1;
            if (s.charAt(i) == s.charAt(j)) {
                if (len == 2) {
                    dp[i][j] = 2;
                } else {
                    dp[i][j] = dp[i+1][j-1] + 2;
                }
            } else {
                dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1]);
            }
        }
    }

    return n - dp[0][n-1] <= k * 2;
}

Let’s test this function with an example:

String s = "abcdba";
int k = 1;
System.out.println(isKPalindrome(s, k));  // Output: true

In this example, the input string ‘abcdba‘ can be converted into a palindrome by changing just one character. We get the expected output of ‘true‘ from our function.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Dynamic Programming interview — then scores it.
📞 Practice Dynamic Programming — free 15 min
📕 Buy this interview preparation book: 100 Dynamic Programming questions & answers — PDF + EPUB for $5

All 100 Dynamic Programming questions · All topics