标签:nta 超过 Plan 差值 窗口 letters 字符串 字符 for
问题:
给定两个等长字符串s和t,相同index上的元素差值为cost
求cost和最大不超过maxCost,所满足的最长子串的长度。
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 charactor in t, so the maximum length is 1. Example 3: Input: s = "abcd", t = "acde", maxCost = 0 Output: 1 Explanation: You can‘t make any change, so the maximum length is 1. Constraints: 1 <= s.length, t.length <= 10^5 0 <= maxCost <= 10^6 s and t only contain lower case English letters.
解法:
sliding window
每个元素的权值为 abs(s[i]-t[i])
求最大窗口,使得权值之和<=maxCost
?? 注意:这里j代表右边界,i代表左边界。
每次首先向右移动右边界,使得j增大,满足条件的情况下,i不变化。所得结果res=j-i也就依次增大。
但当j增大后,超过maxCost,不满足条件了,那么i增大,缩小窗口,但是下一次循环中 j也增大,res是不变的。
之后的窗口尝试只会超过现在的窗口大小。
也就是说,只有当下次res大于现在的res, 且再满足条件的时候,会用新的res替换掉现在的res。
代码参考:
1 class Solution { 2 public: 3 int equalSubstring(string s, string t, int maxCost) { 4 int N=s.size(); 5 int i=0, j=0; 6 for(j=0; j<N; j++){ 7 if((maxCost-=abs(s[j]-t[j]))<0){ 8 maxCost+=abs(s[i]-t[i]); 9 i++; 10 } 11 } 12 return j-i; 13 } 14 };
1208. Get Equal Substrings Within Budget
标签:nta 超过 Plan 差值 窗口 letters 字符串 字符 for
原文地址:https://www.cnblogs.com/habibah-chang/p/13171739.html