題目連結(jié):
題目意譯:
給定一個(gè)包含 '(' 、')' 和小寫(xiě)英文字母的字串 s。
你的任務(wù)是移除最少的括號(hào)(在任意位置的 '(' 或是 ')')使得得到的括號(hào)字串是合法的,並回傳任何一個(gè)合法的字串。
更正式地說(shuō),一個(gè)括號(hào)字串是合法的若且唯若:
如果其為空字串、只包含小寫(xiě)英文字母,抑或是
其可以被寫(xiě)為 AB(A 串接著 B),其中 A 和 B 為合法字串,又或是
其可以被寫(xiě)為 (A),其中 A 為一合法字串。
限制:
1 ≦ s.length ≦ 10 ^ 5
s[i] 只會(huì)是 '(' 、')' 或是小寫(xiě)英文字母。
範(fàn)例測(cè)資:
範(fàn)例 1:
輸入: s = "lee(t(c)o)de)"
輸出: "lee(t(c)o)de"
解釋?zhuān)?"lee(t(co)de)" 、 "lee(t(c)ode)" 也是可以被接受的。
範(fàn)例 2:
輸入: s = "a)b(c)d"
輸出: "ab(c)d"
範(fàn)例 3:
輸入: s = "))(("
輸出: ""
解釋?zhuān)?一個(gè)空字串也是合法的。
解題思維:
基本上就是括號(hào)匹配的問(wèn)題(如
這題),只是當(dāng)我們遇到不平衡(也就是遇到會(huì)使字串不合法的括號(hào))的時(shí)候,我們就先標(biāo)記該括號(hào)(直接移除的話,最糟就是全部字元被移除,這個(gè)情況下會(huì)跑很久)。
然後判斷完後,掃一次字串然後把那些沒(méi)有被標(biāo)記的字元通通依序丟到一個(gè)新的字串。而這個(gè)新字串將會(huì)是用盡可能少的括號(hào)移除所得到的合法字串,因此其為所求。
此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說(shuō)明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。