g1201_1300.s1208_get_equal_substrings_within_budget.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g1201_1300.s1208_get_equal_substrings_within_budget;
// #Medium #String #Binary_Search #Prefix_Sum #Sliding_Window
// #2022_03_09_Time_7_ms_(73.41%)_Space_43.3_MB_(45.62%)
/**
* 1208 - Get Equal Substrings Within Budget\.
*
* Medium
*
* You are given two strings `s` and `t` of the same length and an integer `maxCost`.
*
* You want to change `s` to `t`. Changing the ith
character of `s` to ith
character of `t` costs `|s[i] - t[i]|` (i.e., the absolute difference between the ASCII values of the characters).
*
* Return _the maximum length of a substring of_ `s` _that can be changed to be the same as the corresponding substring of_ `t` _with a cost less than or equal to_ `maxCost`. If there is no substring from `s` that can be changed to its corresponding substring from `t`, return `0`.
*
* **Example 1:**
*
* **Input:** s = "abcd", t = "bcdf", maxCost = 3
*
* **Output:** 3
*
* **Explanation:** "abc" of s can change to "bcd". That costs 3, so the maximum length is 3.
*
* **Example 2:**
*
* **Input:** s = "abcd", t = "cdef", maxCost = 3
*
* **Output:** 1
*
* **Explanation:** Each character in s costs 2 to change to character in t, so the maximum length is 1.
*
* **Example 3:**
*
* **Input:** s = "abcd", t = "acde", maxCost = 0
*
* **Output:** 1
*
* **Explanation:** You cannot make any change, so the maximum length is 1.
*
* **Constraints:**
*
* * 1 <= s.length <= 105
* * `t.length == s.length`
* * 0 <= maxCost <= 106
* * `s` and `t` consist of only lowercase English letters.
**/
public class Solution {
public int equalSubstring(String s, String t, int maxCost) {
int start = 0;
int end = 0;
int currCost = 0;
int maxLength = Integer.MIN_VALUE;
while (end < s.length()) {
currCost += Math.abs(s.charAt(end) - t.charAt(end));
while (currCost > maxCost) {
currCost -= Math.abs(s.charAt(start) - t.charAt(start));
start++;
}
if (end - start + 1 > maxLength) {
maxLength = Math.max(end - start + 1, maxLength);
}
end++;
}
return maxLength;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy