leetCode第20题和第21题———有效括号,合并两个有序链表
1.leetCode第20题
https://leetcode-cn.com/probl...
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true示例 2:
输入:s = "()[]{}"
输出:true示例 3:
输入:s = "(]"
输出:false示例 4:
输入:s = "([)]"
输出:false示例 5:
输入:s = "{[]}"
输出:true
【leetCode第20题和第21题———有效括号,合并两个有序链表】括号是具有对称性的
比如'()'我们就可以提前做一个映射表{'(':')'},当检测到左括号时我们将映射表相应的值放到栈中,继续遍历下一个字节是')',那么我们需要判断一下他是不是和我们栈顶的元素一样 如果一样那就是合法的
function print(s) {
//由于上题说了只校验这三种括号 建立关系表
let map = {"{": "}","[": "]","(": ")",};
let stack = [];
for (let i = 0;
i < s.length;
i++) {
if (s[i] == "{" || s[i] == "[" || s[i] == "(") {
stack.push(map[s[i]]);
} else {
if (s[i] !== stack.pop()) {
return false;
}
}
}
return !stack.length;
}
2.leetCode第21题
https://leetcode-cn.com/probl...
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
思路:
做链表一类的题就是处理链表指针的关系 这道题也不例外,两个链表合并成一个链表只需要在对应逻辑下改变next的值即可。这里我们设置一个cur这个值相当于穿针引线的一个角色 把两条链表穿插到一起。
文章图片
function ListNode(val) {
this.val = val;
this.next = null;
}
function print(l1, l2) {
let head = new ListNode("head");
head.next = l1;
let cur = head;
while (l1 && l2) {
if (l1.val <= l2.val) {
cur.next = l1;
l1 = l1.next;
} else {
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
//如果长度不一那么直接在后面拼接
cur.next = l1 ? l1 : l2;
return head.next;
}
推荐阅读
- 第6.2章(设置属性)
- parallels|parallels desktop 解决网络初始化失败问题
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 第三节|第三节 快乐和幸福(12)
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- android第三方框架(五)ButterKnife
- 开学第一天(下)
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 第326天