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
合并两个有序链表
网友评论