題目連結:
題目意譯:
你被給定一個索引值從 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",所以可以使用
這題的想法來得到子序列的數量。該數量即為所求方法數。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。