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 = 3

Output:3

Explanation: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; ` `} ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

**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.