前言

在我自己学习的过程中,难免会遇到许多复杂的算法问题。解决问题的一个好方法就是查找资料、参考别人的逻辑思维。而有一些问题是查找不到的,也可能是文章写的太乱、太难、太复杂。在这里我分享一下我个人的看法以及思路。

案例分析

在我们打代码的过程中,会经常使用到括号,如果我们使用的代码不得当,那么编译器就会报错。当然了就我的水平而言不可能把编译器的机制搬到这里来。

比如说,我们输入了{[]}()这串括号组,很明显,这是一个正确的括号组。

再比如说,我们输入了{[}]这串括号组,显然,这是一个错误的括号组。

那么如何通过程序来实现这个判断是否合法的功能呢?

其中一个原理叫做——栈。

先举一个例子。

我们把所有左括号通过循环放入栈中。遇到右括号,与栈顶进行匹配。

成功一对从栈中拿走一个元素。

通过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语言解决括号匹配问题