1、题目
定义如下规则序列(字符串):
1.空序列是规则序列;
2.如果S是规则序列,那么(S)和[S]也是规则序列;
3.如果A和B都是规则序列,那么AB也是规则序列。
例如,下面的字符串都是规则序列:
(),[],(()),([]),()[],()[()]
而以下几个则不是:
(,[,],)(,()),([()
现在,给你一些由‘(’,‘)’,‘[’,‘]’构成的序列,你要做的,是补全该括号序列,即扫描一遍原序列,对每一个右括号,找到在它左边最靠近它的左括号匹配,如果没有就放弃。在以这种方式把原序列匹配完成后,把剩下的未匹配的括号补全。
输入:
([()
输出:
()[]()
2、题解
int main() {
//()[()))(];算法思路,利用栈,默认规则即为0,如果不规则,再利用数组打上标记,且只要标记左符号就好,然后输出的时候再特殊输出就好,(((()())()[((())]
string str;
cin >> str;
int* state = new int[str.size()]();//初始为0,默认规则,[(]
stack<char> arr;
for (int i = str.si