16 多校 8

来源:互联网 发布:免费英语网络课程 编辑:程序博客网 时间:2024/06/10 11:33

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5831

字符串的问题,以前也写过一个差不多的,题目大意就是给你一串字符串,判断互换其中任一两个不同括号之后该括号字符串是否合法,然后题目下方提示说必须要换一次,就是告诉”()”这个特例是要输出No的,然后接下来就是,因为它只能换一次,所以最多只能有两个右括号前面没有匹配的左括号,而且整个括号字符串中左右括号要相同,否则就不能变成合法的括号字符串。

#include<iostream>#include<string.h>#include<stdio.h>using namespace std;char s[100000+100];int n,t;int main(){    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        scanf("%s",s);        int cnt = 0 , no_pair = 0;        for(int i=0;i<n;i++)        {            if(s[i]=='(')                cnt++;            else                cnt--;            if(cnt<0)                no_pair++,cnt = 0;        }        if(cnt != no_pair || no_pair > 2 || (n==2 && s[0]=='('))//左右括号总数不想等、未配对左括号多于两个,字符串为“()”            printf("No\n");        else            printf("Yes\n");    }    return 0;}
原创粉丝点击