前往
大廳
主題

LeetCode - 2222. Number of Ways to Select Buildings 解題心得

Not In My Back Yard | 2022-12-10 12:00:00 | 巴幣 1000 | 人氣 220

題目連結:


題目意譯:
你被給定一個索引值從 0 開始的字串 s,其代表著一條街上建築物的種類,其中:
s[i] = '0' 代表著第 i 棟建築物是一間辦公室,而
s[i] = '1' 代表著第 i 棟建築物是一間餐廳。

身為一名市政人員,你想要選擇挑選 3 棟建築物來進行隨機勘察。不過,為了確保多樣性,在選擇的建築物中不能有兩個連續相同種類的建築物存在。

例如,給定 s = "001101",我們不能選擇第 1 、 3 和 5 棟建築物,其將會形成 "011"。這是不被允許的選擇,因為其有著連續相同種類的建築物存在。

回傳合法選擇 3 棟建築物的方法數。

限制:
3 ≦ s.length ≦ 10 ^ 5
s[i] 只會是 '0' 或是 '1'。



範例測資:
範例 1:
輸入: s = "001101"
輸出: 6
解釋:
下列索引值選擇之集合皆合法:
- 從 "001101" 挑 [0,2,4] 得到 "010"
- 從 "001101" 挑 [0,3,4] 得到 "010"
- 從 "001101" 挑 [1,2,4] 得到 "010"
- 從 "001101" 挑 [1,3,4] 得到 "010"
- 從 "001101" 挑 [2,4,5] 得到 "101"
- 從 "001101" 挑 [3,4,5] 得到 "101"
沒有其他選擇是合法的。因此,總計有 6 種選擇。

範例 2:
輸入: s = "11100"
輸出: 0
解釋: 可以證明不存在任何合法選擇。


解題思維:
可以看到我們的選擇之結果應為 "010" 或是 "101"。

因此本題等價於是在詢問 s 中有多少子序列是 "010" 或 "101",所以可以使用這題的想法來得到子序列的數量。該數量即為所求方法數。




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

創作回應

更多創作