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这个值相当于穿针引线的一个角色 把两条链表穿插到一起。
leetCode第20题和第21题———有效括号,合并两个有序链表
文章图片

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; }

    推荐阅读