2021.12.3 学习总结

本文探讨了如何利用栈的数据结构解决括号匹配问题,并将其应用到一个涉及四种括号类型配对的羊群问题中。通过栈操作优化匹配过程,找出最少的替换次数以确保所有羊都能找到伴侣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验课写了几道函数题,感觉自己函数掌握的不是很熟练。

写了一道栈的题,感觉有点儿会这个东西了。

关于栈:最经典的题就是括号匹配,遇到一个左括号就入栈,遇到一个右括号就出栈,这样正好左右匹配,这就是栈的好处。

羊羊们到了谈婚论嫁的年龄了,雷巨巨有的忙了。他有四种羊,每种羊分公母且公母才能配对,为方便输入用[]<>(){}代替四种羊,一天他让一些羊羊站成一排开始配对,有如下定义:假设s1和s2是满足配对的,则s2,{s1}s2,[s1]s2,(s1)s2也是满足配对的,如"[[(){}]<>]"和"{[(<>)]}"是满足配对的,而"<)()"和"]><["是不满足的,雷巨巨可以选择让其中一种羊变成另一种羊但无法改变其性别,如'<'可以变成'(','{','['但不可变成')','}',']'。问至少改变几次才能让羊羊们都找到幸福。

Input

输入一行字符串,仅由四种括号组成,长度不超过1e6

Output

如果不能使所有羊羊配对,则打印"Impossible",否则,打印最少替换的次数

 代码如下:

#include<stdio.h>
#include<string.h>
#include<Stdlib.h>
char a[1000010];
char b[1000010];
int main()
{
    int n,top=0,k=0,i,j;
    scanf("%s",a);
    int len = strlen(a);
    for(i=0; i<len; i++)
    {
        if(a[i] == '[' || a[i] == '{' || a[i] == '<' || a[i] == '(')  //左括号入栈
        {
               b[++top] = a[i];
        }
        else  //右括号分情况讨论
        {
             if(top<1)  //讨论空栈
            {
                k=-1;
                break;
            }
            if(b[top] == '[' && a[i] == ']')
            {
                top--;
            }
            else if(b[top] == '{' && a[i] == '}')
            {
                 top--;
            }
            else if(b[top] == '<' && a[i] == '>')
            {
                 top--;
            }
            else if(b[top] == '(' && a[i] == ')')
            {
                 top--;
            }
            else
            {
                top--;
                k++;
            }
          }
        }
        if(top>=1)
        {
            k=-1;
        }
        if(k==-1)
        {
            printf("Impossible");
        }
        else
        {
            printf("%d",k);
        }
    return 0;
}

,写的有些晚了,今天团建愉快~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值