如果通過插入「 +」和「 1」可以從中得到格式正確的數學表示式,則將帶括號的序列稱為正確的。
例如,序列 「(())()」,"()「和 「(()(()))「是正確的,而」)(」,」(()))(「和」(()" 不是。
定義重新排序操作:選擇括號序列的任意連續子段(子字串),然後以任意方式對其中的所有字元進行重新排序。
當重新排序的子段的長度為t時,重新排序操作需要耗時t秒。
例如,對於「))((」,他可以選擇子字串「)(」並重新排序「)()(」(此操作將花費2秒)。
不難看出,重新排序操作不會改變左括號和右括號的數量。
現在,ld想花費最少的時間,通過任意次數(可能為零)執行重新排序操作來使括號序列變成正確的。
輸入格式:
第一行包含乙個整數n(1≤n≤1e6),表示序列的長度;
第二行包含乙個長度為n的字串,僅由字元『(』和『)』組成。
輸出格式:
輸出乙個整數,表示使括號序列正確的最小秒數;如果不可能實現,則輸出-1。
輸入樣例:
8))((())(
輸出樣例:
#include
using
namespace std;
intmain()
else
if(b==
0&&a==0)
}else
else}if
(b>
0) flag++;}
if(a>
0||b>
0) cout<<-1
;else cout
}
PTA7 3 括號匹配 25 分
給定一串字元,不超過100個字元,可能包括括號 數字 字母 標點符號 空格,程式設計檢查這一串字元中的 是否匹配。輸入在一行中給出一行字串,不超過100個字元,可能包括括號 數字 字母 標點符號 空格。如果括號配對,輸出yes,否則輸出no。sin 10 20yes no解題思路 這個題首先要清楚括...
列印匹配括號
開始抽空做一些演算法題,留下記錄作為菜鳥的成長見證吧。這道題來自於cracking the coding interview,要求列印n對括號的所有可能匹配。我採用遞迴來做,這樣編寫比較方便而且容易弄懂,但用迭代應該會效率快不少而且遞迴一定能轉換成迭代吧,以後有空研究下 如下 include std...
括號匹配(二)
時間限制 1000 ms 記憶體限制 65535 kb 難度 6 描述 給你乙個字串,裡面只包含 四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。如 是匹配的 是匹配的 是不匹配的 是不匹配的 輸入第一行輸入乙個正整數n,表示測試資料組數 n 10 每組測試資料都只有一行,是乙個字串s...