前言
在我自己学习的过程中,难免会遇到许多复杂的算法问题。解决问题的一个好方法就是查找资料、参考别人的逻辑思维。而有一些问题是查找不到的,也可能是文章写的太乱、太难、太复杂。在这里我分享一下我个人的看法以及思路。
案例分析
在我们打代码的过程中,会经常使用到括号,如果我们使用的代码不得当,那么编译器就会报错。当然了就我的水平而言不可能把编译器的机制搬到这里来。
比如说,我们输入了{[]}()这串括号组,很明显,这是一个正确的括号组。
再比如说,我们输入了{[}]这串括号组,显然,这是一个错误的括号组。
那么如何通过程序来实现这个判断是否合法的功能呢?
其中一个原理叫做——栈。
先举一个例子。
我们把所有左括号通过循环放入栈中。遇到右括号,与栈顶进行匹配。
成功一对从栈中拿走一个元素。
通过top--的操作指向栈的下一个元素。
上面这个例子是一次性把所有左括号放入栈中。
那我们碰到这样一个例子呢?
当我们要把元素存入栈时,突然碰到右括号,我们也可以这样执行这个操作。
代码实现
#include <string.h>
#include <stdio.h>
int main()
{
char arr[100];
char s[100];
gets(arr);
int len=0;
int top=-1;
len=strlen(arr);
for(int i=0;i<len;i++)
{
if(arr[i]=='{'||arr[i]=='['||arr[i]=='(')
{
top++;
s[top]=arr[i];
}
if((arr[i]=='}'&&s[top]=='{')||(arr[i]==']'&&s[top]=='[')||(arr[i]==')'&&s[top]=='('))
{
top--;
}
}
if(top==-1)
printf("yes\n");
else
printf("no\n");
return 0;
}
更多推荐
C语言解决括号匹配问题
发布评论