leetcode 921. 使括號有效的最少新增(機智題)
阿新 • • 發佈:2018-11-21
題意:
給一串括號組成的序列,問最少需要新增多少個才使得括號合法。
從形式上講,只有滿足下面幾點之一,括號字串才是合法的:
- 它是一個空字串,或者
- 它可以被寫成
AB
(A
與B
連線), 其中A
和B
都是有效字串,或者 - 它可以被寫作
(A)
,其中A
是有效字串
思路:
一開始蒙著眼睛寫DP,結果超時了。。。。。原來是個機智題。如果前面有"(",那麼後面來“)”就能保證是合法的。所以我們只需要統計最前面多的")"和最後面多的“(”。即第一個'('之後的‘(’應該要和')'相同數量,如果這個後面的括號和反括號的數量不匹配的話,需要額外新增括號與之匹配這是第一個需要補括號的地方,同時,第一個'('之前的‘)’需要額外新增括號成對,這是第二個需要補括號的地方。這兩個地方需要補括號的數量之和就是答案。
程式碼:
class Solution { public: int minAddToMakeValid(string S) { int len = S.length(); int first = 0,last = 0; //first記錄反括號數量,last記錄括號數量 for(int i=0;i<len;i++){ if(S[i]=='(')last++; else { if(last==0)first++; else last--; } } return first+last; } };