給你兩個長度相同的字符串,s 和 t。
將 s 中的第 i 個字符變到 t 中的第 i 個字符需要 |s[i] - t[i]| 的開銷(開銷可能為 0),也就是兩個字符的 ASCII 碼值的差的絕對值。
用于變更字符串的最大預算是 maxCost。在轉化字符串時,總開銷應當小于等于該預算,這也意味著字符串的轉化可能是不完全的。
如果你可以將 s 的子字符串轉化為它在 t 中對應的子字符串,則返回可以轉化的最大長度。
如果 s 中沒有子字符串可以轉化成 t 中對應的子字符串,則返回 0。
示例 1:
輸入:s = “abcd”, t = “bcdf”, cost = 3
輸出:3
解釋:s 中的 “abc” 可以變為 “bcd”。開銷為 3,所以最大長度為 3
代碼
class Solution {public int equalSubstring(String s, String t, int maxCost) {int l=0,r=0,n=s.length(),cost=0,res=0;for(;l<n&&r<n;l++){while (r<n&&cost<=maxCost)//盡量向右滑動{int abs = Math.abs(s.charAt(r) - t.charAt(r));if( cost+ abs >maxCost) break;cost+= abs;r++;}res= Math.max(res,r-l);//記錄最大的窗口cost-= Math.abs(s.charAt(l)-t.charAt(l));//將最左邊的元素移除窗口}return res;}
}