LeetCode 🟡 2734. Lexicographically Smallest String After Substring Operation
🔗 🟡 2734. Lexicographically Smallest String After Substring Operation 1405
tags: Weekly Contest 349
貪心(Greedy)
字串(String)
題意
給定一個由小寫英文字母組成的字串 。執行以下操作:
- 選擇 的任何 非空 子字串,然後將子字串中的每個字母替換為前一個英文字母。例如,將 替換為 , 替換為 。
返回執行 一次 操作後的 字典序最小 的字串。
思路:貪心(Greedy)
顯然除了 之外,其他字母在修改後都會使字串的字典序變小。且若發生修改,前面的字元對於字典序的影響會比後面的字元大。因此我們只需要找到第一個不是 的字母,從其開始往後將所有字母改為前一個字母即可,並且在遇到 時停止。
但需要注意,可能會有不需要修改,即字串中所有字母都是 的情況,這時如何修改都會使字典序變大。但根據題意,還是需要執行一次操作,為此我們需要將操作對字典序的影響越小越好,因此可以直接修改最後一個字母,將其修改為 。
具體步驟如下:
- 初始化一個
boolean
變數 為 , 表示是否找到了第一個不是 的字母。 - 遍歷字串 :
- 如果 為 且當前字母為 , 則停止遍歷, 因為之後的字母改動會使字典序變大。
- 如果當前字母不是 , 則設 為 , 並將當前字母改為前一個字母。
- 如果整個過程中 一直為 , 表示字串都是 , 則將最後一個字母改為 。
- 返回修改後的字串。
複雜度分析
- 時間複雜度:,其中 為字串 的長度。
- 空間複雜度:,若能直接修改 的話,則空間複雜度為 。
1 | class Solution: |
1 | class Solution { |
寫在最後
Cover photo is generated by @たろたろ, thanks for their work!
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus