C++ 中獲取預算內的相等子字串
假設我們有兩個長度相同的字串 s 和 t。我們想要將 s 轉換為 t。將 s 的第 i 個字元更改為 t 的第 i 個字元的成本為 |s[i] - t[i]|,即字元 ASCII 值之間的絕對差。我們還有一個整數 maxCost。我們必須找到 s 的子字串的最大長度,該子字串可以更改為與 t 的對應子字串相同,且成本小於或等於 maxCost。
因此,如果輸入類似於 s = “abcd” 和 t = “bcdf”,則 maxCost 將為 3,這是因為 s 中的 “abc” 可以轉換為 “bcd”,其成本為 3,則輸出將為 3。
為了解決這個問題,我們將遵循以下步驟:
j := 0,sum := 0 和 ret := 0
對於 i 從 0 到 s 和 t 的最小長度
sum 增加 |s[i] – t[i]|
當 sum > maxCost 時
sum 減去 |s[i] – t[i]|
j 增加 1
ret := ret 和 (i – j + 1) 的最大值
返回 ret
示例 (C++)
讓我們看看下面的實現,以便更好地理解:
class Solution {
public:
int equalSubstring(string s, string t, int maxCost) {
int j = 0;
int sum = 0;
int ret = 0;
for(int i = 0; i < min((int)s.size(), (int)t.size()); i++){
sum += abs(s[i] - t[i]);
while(sum > maxCost){
sum -= abs(s[j] - t[j]);
j++;
}
ret = max(ret, i - j + 1);
}
return ret;
}
};輸入
"abcd" "bcdf" 3
輸出
3
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP