leetcode面试经典算法题——2

链接:https://leetcode.cn/studyplan/top-interview-150/

20. 有效的括号

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

Python代码

python 复制代码
class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        # 利用栈先进后出的特点,遇见左符号就进栈,遇见右符号则判断栈顶的符号是否与之匹配。
        len_s = len(s)
        if len_s < 2:
            return False
        for item in s:
            stack_len = len(stack)
            if item == "(" or item == "[" or item == "{":
                stack.append(item)
            if item == ")":
                if stack_len != 0 and stack[-1] == "(":
                    stack.pop()
                else:
                    return False
            elif item == "]":
                if stack_len != 0 and stack[-1] == "[":
                    stack.pop()
                else:
                    return False
            elif item == "}":
                if stack_len != 0 and stack[-1] == "{":
                    stack.pop()
                else:
                    return False
            
            i += 1
        # 操作之后,栈空则全部符合,否则无效
        if len(stack) == 0:
            return True
        else:
            return False
            
                
        
if __name__ == '__main__':
    s = Solution()
    a = "){}"
    print(s.isValid(a))

C++代码

cpp 复制代码
#include <iostream>
#include <stack>
using namespace std;

class Solution {
public:
    bool isValid(string s) {
    // 创建字符栈
        stack<char> myStack; 
        int len_s = s.size();
        if (len_s < 2) return false;
        int i;
        for (i = 0; i < len_s; i++){
            int stack_len = myStack.size(); // 获得栈大小
            if (s[i] == '(' || s[i] == '[' || s[i] == '{')
                    myStack.push(s[i]);
            else if (s[i] == ')') {
                if (stack_len != 0 && myStack.top() == '(') myStack.pop();
                else return false;
            }
            else if (s[i] == ']') {
                if (stack_len != 0 && myStack.top() == '[') myStack.pop();
                else return false;
            }
            else if (s[i] == '}') {
                if (stack_len != 0 && myStack.top() == '{') myStack.pop();
                else return false;
            }
        }
        return myStack.empty(); // 检查栈是否为空
    }
};

int main() {
    Solution s;
    string a = "())";
    cout << s.isValid(a) << endl;
    return 0;
}

141. 环形链表

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

输入:head = [3,2,0,-4], pos = 1

输出:true

解释:链表中有一个环,其尾部连接到第二个节点。

输入:head = [1,2], pos = 0

输出:true

解释:链表中有一个环,其尾部连接到第一个节点。

输入:head = [1], pos = -1

输出:false

解释:链表中没有环。

提示:

  • 链表中节点的数目范围是 [0, 10^4]
  • -10^5 <= Node.val <= 10^5
  • pos 为 -1 或者链表中的一个 有效索引 。

Python代码

python 复制代码
# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        # 使用快慢指针,快指针每次走两个结点,慢指针每次走一个结点,当快指针遇上慢指针则存在环
        fast = head
        slow = head
        while fast:
            if fast.next:
                fast = fast.next.next
            else:
                break
            slow = slow.next
            if fast == slow:
                return True
            
        return False
def CreateListNode(l1):
    head = ListNode(l1[0])
    node = head
    for i in range(1, len(l1)):
        new_head = ListNode(l1[i])
        node.next = new_head
        node = new_head
    return head

21. 合并两个有序链表

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

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]

输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []

输出:[]
示例 3:

输入:l1 = [], l2 = [0]

输出:[0]

提示:

相关推荐
JK0x073 小时前
代码随想录算法训练营 Day40 动态规划Ⅷ 股票问题
算法·动态规划
Feliz..3 小时前
关于离散化算法的看法与感悟
算法
水蓝烟雨4 小时前
1128. 等价多米诺骨牌对的数量
算法·hot 100
codists4 小时前
《算法导论(第4版)》阅读笔记:p11-p13
算法
Kidddddult6 小时前
力扣刷题Day 43:矩阵置零(73)
算法·leetcode·力扣
独行soc7 小时前
2025年渗透测试面试题总结-某服面试经验分享(附回答)(题目+回答)
linux·运维·服务器·网络安全·面试·职场和发展·渗透测试
大龄Python青年8 小时前
C语言 交换算法之加减法,及溢出防范
c语言·开发语言·算法
啊我不会诶8 小时前
CF每日5题
算法
朱剑君10 小时前
排序算法——基数排序
算法·排序算法
COOCC110 小时前
PyTorch 实战:从 0 开始搭建 Transformer
人工智能·pytorch·python·深度学习·算法·机器学习·transformer