Given two string **X** and **Y** of the same length which consists of lowercase letters and also an integer **K**. The task is to find the maximum length up to which **X** can be changed to **Y** within the given cost **K**.

The cost of changing a character is given by the absolute difference between the ASCII value of the characters. That is, to change a character at index **i**, cost = |x[i] – Y[i]|

**Examples:**

Input:X = abcd, Y = bcde, K = 3Output:3Explanation:A maximum of 3 characters can be changed because the cost to change each article is 1.

**Approach: **The idea is to maintain a prefix array of length N to store the absolute sum of the strings. That is, the cost to change the string **X** to **Y**. The following steps can be followed to compute the result:

- Maintain two pointers say
**i**and**j**. - In a while loop check if the difference between i
^{th}index and j^{th}index of prefix array is greater than given cost or not. - If the difference is greater than given cost then increase the j pointer to compensate for the cost else increase the i pointer.

Below is the implementation of the above approach:

## CPP

`// C++ program to find the` `// maximum length of equal substring` `// within a given cost` `#include <bits/stdc++.h>` `using` `namespace` `std;` ` ` `// Function to find the maximum length` `int` `solve(string X, string Y, ` `int` `N, ` `int` `K)` `{` ` ` ` ` `int` `count[N + 1] = { 0 };` ` ` `int` `sol = 0;` ` ` `count[0] = 0;` ` ` ` ` `// Fill the prefix array with` ` ` `// the difference of letters` ` ` `for` `(` `int` `i = 1; i <= N; i++) {` ` ` ` ` `count[i] = count[i - 1] + ` `abs` `(X[i - 1] - Y[i - 1]);` ` ` `}` ` ` ` ` `int` `j = 0;` ` ` ` ` `for` `(` `int` `i = 1; i <= N; i++) {` ` ` `while` `((count[i] - count[j]) > K) {` ` ` ` ` `j++;` ` ` `}` ` ` ` ` `// Update the maximum length` ` ` `sol = max(sol, i - j);` ` ` `}` ` ` ` ` `return` `sol;` `}` ` ` `// Driver code` `int` `main()` `{` ` ` ` ` `int` `N = 4;` ` ` ` ` `string X = ` `"abcd"` `, Y = ` `"bcde"` `;` ` ` ` ` `int` `K = 3;` ` ` ` ` `cout << solve(X, Y, N, K) << ` `"\n"` `;` ` ` ` ` `return` `0;` `}` |

## Java

`// Java program to find the` `// maximum length of equal subString` `// within a given cost` `class` `GFG` `{` ` ` `// Function to find the maximum length` `static` `int` `solve(String X, String Y,` ` ` `int` `N, ` `int` `K)` `{` ` ` ` ` `int` `[]count = ` `new` `int` `[N + ` `1` `];` ` ` `int` `sol = ` `0` `;` ` ` `count[` `0` `] = ` `0` `;` ` ` ` ` `// Fill the prefix array with` ` ` `// the difference of letters` ` ` `for` `(` `int` `i = ` `1` `; i <= N; i++) ` ` ` `{` ` ` ` ` `count[i] = count[i - ` `1` `] + ` ` ` `Math.abs(X.charAt(i - ` `1` `) - ` ` ` `Y.charAt(i - ` `1` `));` ` ` `}` ` ` ` ` `int` `j = ` `0` `;` ` ` ` ` `for` `(` `int` `i = ` `1` `; i <= N; i++)` ` ` `{` ` ` `while` `((count[i] - count[j]) > K)` ` ` `{` ` ` `j++;` ` ` `}` ` ` ` ` `// Update the maximum length` ` ` `sol = Math.max(sol, i - j);` ` ` `}` ` ` ` ` `return` `sol;` `}` ` ` `// Driver code` `public` `static` `void` `main(String[] args)` `{` ` ` ` ` `int` `N = ` `4` `;` ` ` `String X = ` `"abcd"` `, Y = ` `"bcde"` `;` ` ` `int` `K = ` `3` `;` ` ` ` ` `System.out.print(solve(X, Y, N, K) + ` `"\n"` `);` `}` `}` ` ` `// This code is contributed by PrinciRaj1992` |

## Python3

`# Python3 program to find the` `# maximum length of equal subString` `# within a given cost` ` ` `# Function to find the maximum length` `def` `solve(X, Y, N, K):` ` ` `count ` `=` `[` `0` `] ` `*` `(N ` `+` `1` `);` ` ` `sol ` `=` `0` `;` ` ` `count[` `0` `] ` `=` `0` `;` ` ` ` ` `# Fill the prefix array with` ` ` `# the difference of letters` ` ` `for` `i ` `in` `range` `(` `1` `, N ` `+` `1` `):` ` ` `count[i] ` `=` `(count[i ` `-` `1` `] ` `+` ` ` `abs` `(` `ord` `(X[i ` `-` `1` `]) ` `-` ` ` `ord` `(Y[i ` `-` `1` `])));` ` ` ` ` `j ` `=` `0` `;` ` ` ` ` `for` `i ` `in` `range` `(` `1` `, N ` `+` `1` `):` ` ` `while` `((count[i] ` `-` `count[j]) > K):` ` ` `j ` `+` `=` `1` `;` ` ` ` ` `# Update the maximum length` ` ` `sol ` `=` `max` `(sol, i ` `-` `j);` ` ` ` ` `return` `sol;` ` ` `# Driver code` `if` `__name__ ` `=` `=` `'__main__'` `:` ` ` `N ` `=` `4` `;` ` ` `X ` `=` `"abcd"` `;` ` ` `Y ` `=` `"bcde"` `;` ` ` `K ` `=` `3` `;` ` ` ` ` `print` `(solve(X, Y, N, K));` ` ` `# This code is contributed by PrinciRaj1992` |

## C#

`// C# program to find the ` `// maximum length of equal subString ` `// within a given cost ` `using` `System;` ` ` `class` `GFG ` `{ ` ` ` ` ` `// Function to find the maximum length ` ` ` `static` `int` `solve(` `string` `X, ` `string` `Y, ` ` ` `int` `N, ` `int` `K) ` ` ` `{ ` ` ` ` ` `int` `[]count = ` `new` `int` `[N + 1]; ` ` ` `int` `sol = 0; ` ` ` `count[0] = 0; ` ` ` ` ` `// Fill the prefix array with ` ` ` `// the difference of letters ` ` ` `for` `(` `int` `i = 1; i <= N; i++) ` ` ` `{ ` ` ` ` ` `count[i] = count[i - 1] + ` ` ` `Math.Abs(X[i - 1] - ` ` ` `Y[i - 1]); ` ` ` `} ` ` ` ` ` `int` `j = 0; ` ` ` ` ` `for` `(` `int` `i = 1; i <= N; i++) ` ` ` `{ ` ` ` `while` `((count[i] - count[j]) > K) ` ` ` `{ ` ` ` `j++; ` ` ` `} ` ` ` ` ` `// Update the maximum length ` ` ` `sol = Math.Max(sol, i - j); ` ` ` `} ` ` ` ` ` `return` `sol; ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `Main() ` ` ` `{ ` ` ` ` ` `int` `N = 4; ` ` ` `string` `X = ` `"abcd"` `, Y = ` `"bcde"` `; ` ` ` `int` `K = 3; ` ` ` ` ` `Console.WriteLine(solve(X, Y, N, K) + ` `"\n"` `); ` ` ` `} ` `} ` ` ` `// This code is contributed by AnkitRai01` |

**Output:**

3

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.