nyoj15 - 括号匹配(二) - 栈

15-括号匹配(二)

  • 内存限制:64MB 时间限制:1000ms 特判: No
  • 通过数:88 提交数:261 难度:6

题目描述:

给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的

输入描述:

第一行输入一个正整数N,表示测试数据组数(N<=10)
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100

输出描述:

对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行

样例输入:

4
[]
([])[]
((]
([)]

样例输出:

0
0
3
2

 思路:

用栈的思想:

(1)左括号直接入栈

(2)若是右括号且与栈顶左括号匹配,则左括号出栈

(3)剩下的情况,我们向前遍历栈,知道遇到与右括号匹配的,中间的cnt个括号都是不匹配的,ans+=cnt,中间元素通通出栈

若是没匹配的,则ans++,中间元素不出栈

(4)剩下的元素都是不匹配的,ans+=(对列还剩多少元素)

(用数组模拟栈呀)

代码如下:

#include
#include
#include
#include
using namespace std;
char s[105];

void solve(){
    char S[105];
    int len=strlen(s);
    int ans=0,top=0;
    for(int i=0;i

 

你可能感兴趣的:(nyoj15 - 括号匹配(二) - 栈)