ETH官方钱包

前往
大廳
主題

LeetCode - 2904. Shortest and Lexicographically Smallest Beautiful String 解題心得

Not In My Back Yard | 2024-12-16 12:00:04 | 巴幣 2 | 人氣 9

題目連結:


題目意譯:
你被給定一個二元字串 s 以及一個正整數 k。

一個 s 的子字串是「美麗的」,代表著其中 1 的數量恰好為 k 個。

令 len 為最短的美麗子字串之長度。

回傳字串 s 中長度等於 len 且字典序最小的美麗子字串。如果 s 中不存在著美麗子字串,則回傳一個空字串。

一個字串 a 字典序大於另一個字串 b(兩者長度相同),代表著在 a 和 b 中第一個字元不同的位置,a 的字元嚴格大於 b 中對應的字元。

例如說,"abcd" 字典序大於 "abcc",因為兩者第一個不同的位置為第四個字元,而 'd' 大於 'c'。

限制:
1 ≦ s.length ≦ 100
1 ≦ k ≦ s.length



範例測資:
範例 1:
輸入: s = "100011001", k = 3
輸出: "11001"
解釋: 此例中有 7 個美麗子字串:
1. 子字串 "100011001"。
2. 子字串 "100011001"。
3. 子字串 "100011001"。
4. 子字串 "100011001"。
5. 子字串 "100011001"。
6. 子字串 "100011001"。
7. 子字串 "100011001"。
最短的美麗子字串的長度為 5。
長度 5 且字典序最小的美麗子字串為子字串 "11001"。

範例 2:
輸入: s = "1011", k = 2
輸出: "11"
解釋: 此例中有 3 個美麗子字串:
1. 子字串 "1011"。
2. 子字串 "1011"。
3. 子字串 "1011"。
最短的美麗子字串的長度為 2。
長度 2 且字典序最小的美麗子字串為子字串 "11"。

範例 3:
輸入: s = "000", k = 1
輸出: ""
解釋: 此例中無美麗子字串存在。


解題思維:
直接窮舉所有可能的子字串即可。

注意到雖然子字串總計有 O(n ^ 2),其中 n 為 s 之長度,但是不需要每一個子字串獨立花 O(n) 時間檢查有幾個 1 存在於其中。將相同開頭(或相同結尾)的子字串聚在一起然後根據長度由小到大邊窮舉邊檢查即可。總體時間複雜度是 O(n ^ 2)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作