括号匹配 C语言:
提示:这里简述题目
题目来自Leetcode中国
给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效。
有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
原因分析:
这里我们用到了数据结构的栈,栈是一种后进先出的数据结构,我们可以这样理解这个问题,当我们输入左括号时,我们将其压入栈中,当我们输入右括号时,如果与栈顶的左括号匹配,则将栈顶的左括号出栈,(不论如何变换,如果是一个可以匹配得括号字符串,那么在这个字符串中必然在中间会是一对相连的并且匹配的括号)
解决方案:
这里我们可以用指针,但是我也没有用到(不清楚使用指针会有什么样的优势),由于目前没有具体的测试样例,也不是很清楚这段代码会在哪个运行样例那里会有错误。如果大佬发现问题,希望可以指出。
//括号匹配
#include<stdio.h>
#include<stdlib.h>
char array[]={'(','[','{','+'};
int judge(char x)//判断函数,方便下面主函数中的if语句的判断条件
{
if(x==')')
{return 0;
}
if(x==']')
{
return 1;
}
if(x=='}')
{
return 2;
}
else
{
return 3;
}
}
typedef struct{
int len;
int top;
char a[100];
}Stack;//这里定义栈的结构体
int main()
{
Stack s;
s.len=100;
s.top=-1;
int x;
while(1)
{
scanf("%c",&x);
if(x=='\n'||x=='\0')
{
break;
}
if(s.top==-1||s.a[s.top]!=array[judge(x)])
{
s.top++;
s.a[s.top]=x;
}
else
{
s.top--;
}
}
if(s.top==-1)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
希望大家指正。
昨天上课老师讲了大学期间 为数不多的鸡汤,
和大家分享
你一定要努力,但千万别着急。
可能是这样的吧,给自己或者这个时代的大家都会有一定的焦虑之类的吧,尤其是大家都在高呼内卷,更多的是看中结果的时代,怎么讲呢,高中,为了一个清晰的目标而追求,我要考大学,大学,为了保研,得奖学金,晚睡早起,搞竞赛,大家都在这样的忙碌着,生怕着自己有在哪里会比别人慢一步,这样来说吧,我们看这样的行为会感觉这个真的是一个人的努力极限了,天道酬勤,我们想着自己可以变得更好,就是要付出时间,精力,这个是必然的,但是请在努力的时候,一定不要着急,厚积薄发,做事不可急功近利,一定要记得,这个社会越是浮躁,我们越要将自己的心静下来,踏踏实实的做事情,追求自律而高效的学习。
你一定要努力,但千万别着急!
各位加油!!!
参考文献:https://blog.csdn.net/qq_45021180/article/details/104850296