U-Boot番外篇 | U-Boot驱动模型DM介绍

c语言学习:文件操作

  返回  

括号匹配 (栈

2021/7/21 20:19:21 浏览:

蒜头君在纸上写了一个串,只包含'('')'。一个'('能唯一匹配一个')',但是一个匹配的'('必须出现在')'之前。请判断蒜头君写的字符串能否括号完全匹配,如果能,输出配对的括号的位置(匹配的括号不可以交叉,只能嵌套)。

输入格式

一行输入一个字符串只含有'('')',输入的字符串长度不大于 5000050000。

输出格式

如果输入括号不能匹配,输出一行"No",否则输出一行"Yes",接下里若干行每行输出 22 个整数,用空格隔开,表示所有匹配对的括号的位置(下标从 11 开始)。你可以按照任意顺序输出。

#include<stdio.h>
struct kuohao{
    char kh;
    int dirt;
}s[100000],st[100000];
int main(){
    int top=-1;
    int i=0;
    int dirction[50000][2];
    int cnt=0;
    do{
        scanf("%c",&s[i].kh);
        s[i].dirt=i+1;
        i++;
    }while(s[i-1].kh!='\0');

    for(i=0;s[i].kh!='\0';i++){
        if(s[i].kh=='(') {st[++top]=s[i];}
        else if(s[i].kh==')'&&top!=-1) {
            dirction[cnt][0]=st[top].dirt;
            dirction[cnt][1]=s[i].dirt;
            cnt++;
            top--;}
        else if(s[i].kh==')'&&top==-1) {printf("No");return 0;}
        
        
    }
    if(top!=-1) { printf("No");return 0;}
    printf("Yes\n");
    for(i=0;i<cnt;i++)printf("%d %d\n",dirction[i][0],dirction[i][1]);
    return 0;
}

 

 

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号