波波老师,你这程序有bug哟,如果传进去的字符串是 ((((aa)) 按理是不符合要求的,但是会返回true哟

来源:3-3 栈的另一个应用:括号匹配

小罗John

2018-08-02

如题,发现一个小bug:

如果传进去的字符串是 ((((aa)) 按理是不符合要求的,但是会返回true哟

写回答

1回答

liuyubobobo

2018-08-02

哈哈。赞。


由于在这一小节,我解决的是Leetcode上的20号问题,但是,这个问题本身规定了,字符串中只可能有'(', ')', '[', ']', '{', '}'六种字符。所以相当于已经规定了这个算法输入的前置条件。在写这个算法的时候,我们是不需要对这个前置条件做验证。(我们写二分搜索法的时候是不要验证传来的待搜索数组是有序的,不然所有的二分搜索法都是O(n)的复杂度(验证有序性),或者O(nlogn)的复杂度(进行排序),而非O(logn)了)。


可以理解成,对这个前置条件的满足,应该由调用这个算法之前的步骤满足。换句话说,对于你给定的输出,应该有步骤将其变为“(((())”再传给这个算法。而单就我们规定的这个算法而言,“((((aa))”不是一个合法的输入:)


以上都是我的辩解:)当然在写算法的过程中,能够在不影响性能的基础上“顺便”加入防御性逻辑,是没有问题的:)

0
2
小罗John
哈哈,我后面也看了一下,发现我记错题目要求了,谢谢老师
2018-08-03
共2条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程