竞赛
考级
思路: 题目要求判断一个表达式的前后括号是否匹配。 1. 设置栈,记录前括号的数量 2. 将表达式的每个字符依序输入直到输入的为@退出 3. 如果输入的是(则入栈 4. 如果输入的是),栈为空说明没有前括号,不匹配,直接输出NO,否则出栈 5. 直到输入结束,如果栈为空说明表达式匹配,否则不匹配 代码:
检查输入的表达式中的左右圆括号是否匹配。
代码呈现 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 思路分析 输入字符串,遍历 如果它是左括号,进栈 如果它是右括号: 1.栈头为左括号,左括号出栈 2.栈头没有(栈空了),标志变量增加,退出循环 3.栈头不是左括号,标志变量增加,退出循环 遍历结束后,如果栈还有(即括号还未配对完),标志变量增加 如果标志变量为0,输出YES,否则输出NO
直接暴力
不要暴力破解!复杂度太高,用栈,复杂度只有o(n)。 先新建栈,再建一个字符型变量,(不用字符串可以用一个变量一个个输入)在输入时如有“(”记作1压入栈内,在输入时如有“)”就比较栈顶元素是否为1,如是,删除栈顶元素(指针下移)如不是,输出“NO”如果遇到“@”退出循环,最后检查栈是否为空,如空,输出“YES”如还有元素,输出“NO”。 具体代码如下: 求小赞一个。
题解如下 欢迎加入团队
这道题其实很简单,我们甚至不用栈。
思路: 遍历表达式,将左括号(进栈,若遇到右括号),则检查栈是否为空,若是空的,说明没有匹配的(,输出NO,结束程序,遍历后再次查看栈是否为空,若不空,则说明有多余的(,输出NO,否则,输出YES 代码实现
【参考代码】 【思路分析】 定义数组 s 模拟栈,TOP 为指向栈顶的指针,初始化为0。 遍历表达式,出现 ( ,将其入栈,出现 ),将与之匹配的左括号出栈。遍历结束,如果栈是空的,说明括号匹配,否则为不匹配。
一个不错的练习栈运用的题目。 思路 去的垃圾(除非你在和其他人抢生意)。 所以可以利用这一特性,将后进的括号与栈顶(离他最近)的括号匹配消除,不影响后续和之前的括号。 当然,在本题的sub4中有先右在左的括号,所以要加一条判断,如果在空栈时直接有右括号,直接输出“NO”。 ***在本题中没有“((”的组合,否则下面代码有问题。闲得发慌学习积极的同学可以尝试自己写更精准但较低速的代码。 代码 我知道你们已经等不及要 偷抄 借鉴了 祝你AC!
提交答案之后,这里将显示提交结果~