前言

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

案例分析

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

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

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

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

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

先举一个例子。

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

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

通过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; }

技术
©2019-2020 Toolsou All rights reserved,
TypeScript:函数类型接口8道大厂指针笔试题让你秒杀指针!!!MySQL 日期时间加减mysql 查询条件之外的数据_mysql 查询符合条件的数据查linux的操作系统版本,如何查看Linux操作系统版本?将String类型转换成Map数据类型使用uuid做MySQL主键,被老板,爆怼一顿C语言中的字符串函数和字符函数linux服务器中毒排查--基础篇C# ASCII码字符转换