字字珠璣 替換後,最長的相等子字串_滑動窗口應用_Leetcode #1208

更新於 2024/06/06閱讀時間約 6 分鐘

題目敘述 Get Equal Substrings Within Budget

給定兩個字串s和t,還有對應的預算上限cost。
每修改一個字元就要付出對應的ASCII Code距離成本。
請問修改後s 和 t 最長的相等子字串長度是多少?


原文題目敘述


測試範例

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.
"abc"改成"bcd"耗費3單元的修改成本,​字串長度=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.
"a" 改成 "c" 耗費2單元的修改成本,接下來任何修改都會超過預算限制,字串長度=1

Example 3:

Input: s = "abcd", t = "acde", maxCost = 0
Output: 1
Explanation: You cannot make any change, so the maximum length is 1.
預算=0 代表無法做修改
原本相等的子字串只有"a" 長度=1

約束條件

Constraints:

  • 1 <= s.length <= 10^5

輸入字串的長度介於1~十萬之間。

  • t.length == s.length

輸入字串s和字串t長度相等

  • 0 <= maxCost <= 10^6

預算上限介於0~一百萬之間,如果預算等於零,代表不允許修改。

  • s and t consist of only lowercase English letters.

輸入字串只會有小寫英文字母。


觀察

題目說是修改後的最長相等子字串的長度。

也就是說,一定要是連續的某個區間,區間內處處相等

原題目等價於:

連續的某個區間,區間內每個字元都相等,而且修改總成本<=最大預算


聯想到可以用滑動窗口的框架 合縱連橫: 從滿足特定條件的區間 理解 滑動窗口 背後的本質來解。


滑動窗口(Sliding window)框架示意圖

raw-image

滑動窗口(Sliding window)的框架

left = 0

# 右端點持續往右滑動,掃描每個元素​

for right, value in enumerate( array ):

更新窗口資訊​

while 為了滿足特定條件,窗口需要收縮時:

收縮窗口
更新窗口資訊
left += 1


現在滿足條件了,可以更新答案​

return 最終答案​

這題的窗口資訊是什麼?

當下窗口的大小字元修改總成本


特定條件是什麼?

窗口內的字元修改總成本必須 小於等於 總預算


更新答案時,如何計算?

更新答案時,就是維護窗口大小的最大值=連續相等子字串的長度最大值


演算法 滑動窗口

從左到右掃描每個字元,如果字元不同,就需要修改,這時候修改成本累加當下的ASCII Code距離。

如果修改總成本已經超過總預算了,
則收縮左窗口,一直到修改成本小於等於總預算內為止

每回合動態更新窗口的最大值,也就是連續相等子字串的長度最大值


程式碼 滑動窗口

class Solution:
def equalSubstring(self, s, t, cost):

# left endpoint of sliding window
left = 0

# current edit cost in sliding window
cur_cost = 0

# max length of valid sliding window = max length of equal substring
max_length = 0

# Scan each character
for right in range( len(s ) ):

# Update edit cost
if s[right] != t[right]:
cur_cost += abs( ord(s[right]) - ord(t[right]) )

# Shrink sliding window if current cost is over budget
while cur_cost > cost:
cur_cost -= abs( ord(s[left]) - ord(t[left]) )
left += 1

# Update max length of valid sliding window = length of equal substring
max_length = max(max_length, right-left+1)

return max_length

複雜度分析

時間複雜度:O(n)

滑動窗口從左到右,掃描每個字元,每個字元最多檢查兩次(擴張一次,收縮一次)。


空間複雜度: O(1)

使用到的都是固定尺寸的臨時變數,為常數級別O(1)。


Reference

[1] Get Equal Substrings Within Budget - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
給定一個輸入非負整樹陣列nums,請找出k值,使得陣列中恰好有k個元素大於等於 k。如果無解,回傳-1。尋找k值的方法包括排序法和二分搜尋法,時間複雜度都為O(n log n),空間複雜度為O(1)。關鍵知識點是當解空間具有遞增或遞減的性質時,可以用二分搜尋法加快搜尋效率。
探討如何使用DP動態規劃的方法來進行單字串接,包含了DP遞迴關係式、狀態定義、優化技巧和程式碼示例。同時分析了時間複雜度、空間複雜度和關鍵知識點。這是LeetCode的一個應用題,類似於Word Break I的延伸。
知道如何從一組給定的英文字母和單字庫中的單字拼出最高分的單字組合。使用DFS + 回溯法 + 剪枝優化的演算法,詳細分析瞭如何展開所有可能的路徑,並且找出符合條件的狀態,協助讀者理解演算法背後的思維和方法。
本篇文章介紹了區間DP及博弈論Min/Max最佳化的相關概念,以及如何應用這些概念來計算最佳策略進行取石頭遊戲的模擬。文章實際分析了演算法、實用的加速技巧和關鍵知識點。這篇文章對於想要學習區間DP的讀者來說非常有價值。
子集合生成是一道經典的組合類上機考和面試題目。本篇文章介紹多個不同的解決方案,以及相關演算法框架。主要目標是給定n個相異的元素,產生所有的子集合。
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 直線排列Permutations 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所有可能的情況,遞迴展開所有分
給定一個輸入非負整樹陣列nums,請找出k值,使得陣列中恰好有k個元素大於等於 k。如果無解,回傳-1。尋找k值的方法包括排序法和二分搜尋法,時間複雜度都為O(n log n),空間複雜度為O(1)。關鍵知識點是當解空間具有遞增或遞減的性質時,可以用二分搜尋法加快搜尋效率。
探討如何使用DP動態規劃的方法來進行單字串接,包含了DP遞迴關係式、狀態定義、優化技巧和程式碼示例。同時分析了時間複雜度、空間複雜度和關鍵知識點。這是LeetCode的一個應用題,類似於Word Break I的延伸。
知道如何從一組給定的英文字母和單字庫中的單字拼出最高分的單字組合。使用DFS + 回溯法 + 剪枝優化的演算法,詳細分析瞭如何展開所有可能的路徑,並且找出符合條件的狀態,協助讀者理解演算法背後的思維和方法。
本篇文章介紹了區間DP及博弈論Min/Max最佳化的相關概念,以及如何應用這些概念來計算最佳策略進行取石頭遊戲的模擬。文章實際分析了演算法、實用的加速技巧和關鍵知識點。這篇文章對於想要學習區間DP的讀者來說非常有價值。
子集合生成是一道經典的組合類上機考和面試題目。本篇文章介紹多個不同的解決方案,以及相關演算法框架。主要目標是給定n個相異的元素,產生所有的子集合。
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 直線排列Permutations 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所有可能的情況,遞迴展開所有分
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
我對「中」字字源的猜想是,「中」乃是結繩記事之具。中间的一竖,应该是纲。波浪线是结的绳,其名称或是纪。“纲纪四方”中的“纲纪”,就是个“中”。引申出来,“纲纪”就成国家社会的历史、秩序与规律,执这个“中”而治。
Thumbnail
我的猜想是,「中」乃是結繩記事之具。書有我未曾讀,讀者諸君如知有人早已提出此說,以提供線索為盼。
Thumbnail
歷來對「中」字字形的字源解釋中,有兩種最為重要:一為旗幟,一為儀器。
Thumbnail
「中」字的字源與意味,使我困惑了很久。這裏是積歷年所得的一個階段性的小結。 (一)「中」字的重要性 「中」這個字的重要性,大概不需講,但還有些部分不大為人註意,因而有可講處,如史,吏,用,庸等皆與「中」關係甚巨。
Thumbnail
讀三國最精彩的地方真的是人才太多,搞到裡面隨便一個龍套角色來到現代,他的權謀術可能都海放一狗票人。來提一個有極強本事但不外顯的人物:大耳賊劉備。 我聽到身邊親友對大耳賊的評價都不太好,忝為一個集團的龍頭老大,武不如關羽、張飛、趙子龍;文更不如諸葛村夫、龐統、馬良、馬謖等。唯一會的技能只有兩個,一是哭
Thumbnail
晉 郭普 本義 唐 楊益輯 清 蔣大鴻 編次 玄空字字金第一 蓋言此書,先賢編出,其中理氣,條分縷晰,辨正原文,有言責無,今傳與後,切勿輕洩。 邪書肆起,地學不明,各宗師授,莫辨渭涇,我作此書,暗室一燈,楷模後學,字字萬金。 戒學者遵律第二 要求真訣,盟神受戒,毋為財動,毋為仇害,擇主以交,惟德是
Thumbnail
往鋼珠筆去選擇會較好,簡單好取得,價格也便宜,寫完補充筆芯管也很環保(?)
Thumbnail
以下為兩位有緣人分享,來文照登:   分享一   《阿伯的話─現場開示精華節錄》:「世間皆是假相,事情過了就好,寧可吃虧也切莫傷害他人,避免造下業障,你修你的行,他造他的業,自己不要受對方影響,而起心動念、浮浮沉沉;若有相欠,待還完因果後,仍要持續唸經,自己的心識才能清淨。」
Thumbnail
雖然這是款於2010年出版的老遊戲,但卻獲得2010 Mensa Select(門薩獎首選)的殊榮,今年由2Plus代理出版,變身成了外星人的新主題,有種耳目一新的感覺呢!快來看看這款遊戲在玩些什麼吧!
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
我對「中」字字源的猜想是,「中」乃是結繩記事之具。中间的一竖,应该是纲。波浪线是结的绳,其名称或是纪。“纲纪四方”中的“纲纪”,就是个“中”。引申出来,“纲纪”就成国家社会的历史、秩序与规律,执这个“中”而治。
Thumbnail
我的猜想是,「中」乃是結繩記事之具。書有我未曾讀,讀者諸君如知有人早已提出此說,以提供線索為盼。
Thumbnail
歷來對「中」字字形的字源解釋中,有兩種最為重要:一為旗幟,一為儀器。
Thumbnail
「中」字的字源與意味,使我困惑了很久。這裏是積歷年所得的一個階段性的小結。 (一)「中」字的重要性 「中」這個字的重要性,大概不需講,但還有些部分不大為人註意,因而有可講處,如史,吏,用,庸等皆與「中」關係甚巨。
Thumbnail
讀三國最精彩的地方真的是人才太多,搞到裡面隨便一個龍套角色來到現代,他的權謀術可能都海放一狗票人。來提一個有極強本事但不外顯的人物:大耳賊劉備。 我聽到身邊親友對大耳賊的評價都不太好,忝為一個集團的龍頭老大,武不如關羽、張飛、趙子龍;文更不如諸葛村夫、龐統、馬良、馬謖等。唯一會的技能只有兩個,一是哭
Thumbnail
晉 郭普 本義 唐 楊益輯 清 蔣大鴻 編次 玄空字字金第一 蓋言此書,先賢編出,其中理氣,條分縷晰,辨正原文,有言責無,今傳與後,切勿輕洩。 邪書肆起,地學不明,各宗師授,莫辨渭涇,我作此書,暗室一燈,楷模後學,字字萬金。 戒學者遵律第二 要求真訣,盟神受戒,毋為財動,毋為仇害,擇主以交,惟德是
Thumbnail
往鋼珠筆去選擇會較好,簡單好取得,價格也便宜,寫完補充筆芯管也很環保(?)
Thumbnail
以下為兩位有緣人分享,來文照登:   分享一   《阿伯的話─現場開示精華節錄》:「世間皆是假相,事情過了就好,寧可吃虧也切莫傷害他人,避免造下業障,你修你的行,他造他的業,自己不要受對方影響,而起心動念、浮浮沉沉;若有相欠,待還完因果後,仍要持續唸經,自己的心識才能清淨。」
Thumbnail
雖然這是款於2010年出版的老遊戲,但卻獲得2010 Mensa Select(門薩獎首選)的殊榮,今年由2Plus代理出版,變身成了外星人的新主題,有種耳目一新的感覺呢!快來看看這款遊戲在玩些什麼吧!