題目連結(jié):
題目意譯:
你被給定一個(gè)索引值從 0 開始的、偶數(shù)長度 n 之字串 s。字串由恰好 n ÷ 2 個(gè) n ÷ 2 個(gè)開括號(hào) '[' 以及 n ÷ 2 個(gè)閉括號(hào) ']'。
一個(gè)字串會(huì)被稱為平衡的若且唯若:
其為空字串,或
它可被表為 AB,其中 A 和 B 皆為平衡字串,或
它可被表為 [C],其中 C 為平衡字串。
你可以無限次地交換任兩個(gè)索引值之括號(hào)。
回傳使 s 變?yōu)槠胶庾钌偎杞粨Q次數(shù)。
限制:
n == s.length
2 ≦ n ≦ 10 ^ 6
n 為偶數(shù)。
s[i] 只會(huì)是 '[' 或 ']'。
開括號(hào) '[' 的數(shù)量等於 n ÷ 2 ,且閉括號(hào) ']' 的數(shù)量等於 n ÷ 2。
範(fàn)例測資:
範(fàn)例 1:
輸入: s = "][]["
輸出: 1
解釋: 你可以藉由交換索引值 0 和索引值 3 使字串平衡。
結(jié)果字串為 "[[]]"。
範(fàn)例 2:
輸入: s = "]]][[["
輸出: 2
解釋: 你可以藉由以下步驟來使字串平衡:
- 交換索引值 0 和索引值 4。s = "[]][[]"。
- 交換索引值 1 和索引值 5。s = "[[][]]"。
結(jié)果字串為 "[[][]]"。
範(fàn)例 3:
輸入: s = "[]"
輸出: 0
解釋: 字串已經(jīng)平衡了。
解題思維:
首先按照一般檢查括號(hào)是否匹配(即本題的「平衡」)之作法,如
這題,然後看其有多「不平衡」。
例如 "[]][]]][[[" 可以看到會(huì)有三個(gè) ']' 、 三個(gè) '[' 沒有被配對(duì)到。因此將其餘有匹配的括號(hào)移除後(可以移除是因?yàn)樗鼈兊拇嬖谂c否或是放在何處實(shí)質(zhì)上都不影響平衡性),字串便成為了完全不平衡的 "]]][[["。
而所有的字串都可以化簡成空字串或是完全不平衡的字串。一旦有了像是 "]]][[[" 這種字串之後,我們可以看到一次交換的操作最多可以得到兩組平衡的括號(hào) "[]"。例如說你可以將 "]]][[[" 頭尾的字元交換,得到 "[]][[]",把配對(duì)後的括號(hào)消除後得到 "]["。再做一次交換便可以得到 "[]"。
所以如果我們有 X 個(gè) ']' 需要配對(duì),則我們最少只需
ceil(X ÷ 2)
次交換即可將所有括號(hào)配對(duì)完成,即將字串 s 平衡了。其中 ceil 為上高斯函數(shù)(即向上取整。對(duì)於正數(shù)來說等價(jià)於無條件進(jìn)位)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。