CodeForces - 224C. Bracket Sequence (栈模拟)简单做法
A bracket sequence is a string, containing only characters “(”, “)”, “[” and “]”.
A correct bracket sequence is a bracket sequence that can be transformed into a correct arithmetic expression by inserting characters “1” and “+” between the original characters of the sequence. For example, bracket sequences “()[]”, “([])” are correct (the resulting expressions are: “(1)+[1]”, “([1+1]+1)”), and “](” and “[” are not. The empty string is a correct bracket sequence by definition.
A substring s[l… r] (1?≤?l?≤?r?≤?|s|) of string s?=?s1s2… s|s| (where |s| is the length of string s) is the string slsl?+?1… sr. The empty string is a substring of any string by definition.
You are given a bracket sequence, not necessarily correct. Find its substring which is a correct bracket sequence and contains as many opening square brackets ?[? as possible.
Input
The first and the only line contains the bracket sequence as a string, consisting only of characters “(”, “)”, “[” and “]”. It is guaranteed that the string is non-empty and its length doesn’t exceed 105 characters.
Output
In the first line print a single integer — the number of brackets ?[? in the required bracket sequence. In the second line print the optimal sequence. If there are more than one optimal solutions print any of them.
Examples
Input
([])
Output
1
([])
Input
(((
Output
0
括號是就近匹配的,所以可以用棧來模擬,所以可以將括號壓棧,匹配后出棧,最后棧底剩余的就是不能出棧的就是不能匹配的,一般的方法是找到這些括號但是太費勁了,我們同時建立一個棧,同時入棧,出棧,存括號的下標,那么在出棧操作之后,第一個stack就只剩下不匹配的括號,第二個stack就只剩下不匹配的括號的下標。
下標將括號數組分成了好幾段,枚舉每一段的左中括號的數量即可,比較最大值更新左右段點即可
總結
以上是生活随笔為你收集整理的CodeForces - 224C. Bracket Sequence (栈模拟)简单做法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 疯子的算法总结(五) 矩阵乘法 (矩阵
- 下一篇: 特斯拉 2022 年新增近 2.9 万名