美文网首页
[day6] [LeetCode] [title20,21]

[day6] [LeetCode] [title20,21]

作者: 落落汇佳 | 来源:发表于2018-08-03 18:52 被阅读10次

20. 有效的括号

给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入:        "()"         输出:        true

示例 2:

输入:        "()[]{}"      输出:       true

示例 3:

输入:          "(]"         输出:        false

示例 4:

输入:          "([)]"       输出:        false

示例 5:

输入:         "{[]}"          输出:       true

错误的代码

错误代码Part 1 错误代码Part 2

正确的答案(能做出来真不容易啊~~~~~)

Part 1 Part 2

时间复杂度

时间复杂度

1.本题采用的方法是,寻找能够匹配的字符(最内层的字符),再删除匹配了的数组元素,然后数组下标减一(即稍微外层的字符),又开始匹配,依次匹配,如果未匹配成功,则直接返回false,如果执行完循环后,则返回true

2.本题输入的是字符串,无法直接删除指定的元素,于是先把字符串赋值为List,用list可以直接删除特定的元素。

3.一组字符匹配成功,需要删除匹配成功的数组元素,在删除的过程中遇到了问题,原问题程序是:

if ss[i+1] == ')':

                    del ss[i]

                    del ss[i+1]

                    continue

问题在于,第ss[i]与s[i+1]分别是'('和')',当删除第i个元素后,后面的元素会自动补齐上来。于是第i+1个元素不再是')',第i个元素是')'。于是要删除的不是ss[i+1],而是del ss[i]。当删除完这两个元素之后,下面就需要返回上一层,如果直接continue,则不能返回上一层,无法继续匹配。所以应该在continue前加i-=1。达到返回上一层的目的。

正确的程序应该为:

if ss[i+1] == ')':

                    del ss[i]

                    del ss[i]

                    i -= 1

                    continue

21.合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入: 1->2->4, 1->3->4

输出:1->1->2->3->4->4

合并两个有序链表

相关文章

网友评论

      本文标题:[day6] [LeetCode] [title20,21]

      本文链接:https://www.haomeiwen.com/subject/kfduvftx.html