63分求助 注释部分是我的思路 感谢好心的大佬
查看原帖
63分求助 注释部分是我的思路 感谢好心的大佬
170047
小渣青999楼主2020/8/15 20:38
#include<iostream>
#include<cstdio>
#include<vector>
#include<stack>
#include<string>
using namespace std;
int a[4];//0[ 1] 2( 3)
vector<int> v[4];
vector<int> vt[2];
stack<int> st[2];
int main()
{
	string s;
	cin>>s;
	int flag=1;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='[')	    st[0].push(i);
		else if(s[i]==']')
		{
			if(st[0].empty())
			{
				s.insert(i,"["); i++;
			}
			else st[0].pop(); 
		}
    }
	if(!st[0].empty())
	{
		while(!st[0].empty())
		{
			int x=st[0].top();
			st[0].pop();
			s.insert(x+1,"]");
		}
	} 
	
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='(')	    st[0].push(i);
		else if(s[i]==')')
		{
			if(st[0].empty())
			{
				s.insert(i,"("); i++;
			}
			else st[0].pop(); 
		}
    }
	if(!st[0].empty())
	{
		while(!st[0].empty())
		{
			int x=st[0].top();
			st[0].pop();
			s.insert(x+1,")");
		}
	}
	cout<<s;
	return 0;
	
}

/*
存储所有括号的位置
从前向后扫描
遇到一个左括号就push
遇到一个右括号就pop(如果此时空栈,则在前面加上一个左括号再pop

如果最后栈不为空,在每个左括号后面加上一个有括号 


*/

2020/8/15 20:38
加载中...