此代码如何检查平衡括号
How does this code to check for balanced parenthesis work?
这是我正在处理的问题:http://usaco.org/index.php?page=viewproblem2&cpid=188
解决方案如下:http://usaco.org/current/data/sol_typo.html
我无法理解解决方案背后的逻辑。任何人都可以详细解释解决方案吗?
我是解决这些问题的新手,但我正在努力为11月的第一次USACO比赛做准备。只是为了澄清起见,我正在用C++编写解决方案。
要使字符串具有平衡括号,您需要两件事:相同数量的(
和)
,并且每个(
都可以与右侧的至少一个)
匹配。
另一种看待它的方法是将(
视为+1
,将)
视为-1
。一次处理一个括号时,根据其符号,从 0 开始添加或减去 1。如果总和降至 0 以下(这只有在您击中 )
时才会发生),您知道如果可以反转一个括号来平衡字符串,它将是那个。达到此点后,将总和重置为零。如果总和再次降至零以下,它将永远无法平衡,因此您可以提前退出。
您需要处理的另一种情况是将(
切换到)
将平衡字符串。仅当末尾的总和为 2 时,您才能执行此操作,因此您可以跟踪在总和为>=2 时看到的最后(
。如果总和<2,则无法切换该(
。
如果末尾的总和小于零,则字符串将不平衡。如果末尾的总和为零,那么如果你找到一个要反转的括号,那就是要反转的括号。否则,如果它是2
,您可以交换您找到的最后一个(
来平衡字符串。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- 使用堆栈从黑客等级中解决平衡括号检查的错误
- 检查BST中每个节点的平衡因子并将其存储在节点中
- 使用 vector 检查表达式中的括号是否平衡
- 平衡括号问题为什么要检查它是否为空?
- C++用于检查平衡 ()s、{} 和 []s 字符串的程序
- 检查二叉树是否平衡
- 检查平衡分组字符时出现在线判断运行时错误
- 此代码如何检查平衡括号