leetcode口试经典算法题——2

[复制链接]
发表于 2025-9-23 05:34:44 | 显示全部楼层 |阅读模式
链接:https://leetcode.cn/studyplan/top-interview-150/
20. 有用的括号

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有用。
有用字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以准确的次序闭合。
  • 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
Python代码
  1. class Solution:
  2.     def isValid(self, s: str) -> bool:
  3.         stack = []
  4.         # 利用栈先进后出的特点,遇见左符号就进栈,遇见右符号则判断栈顶的符号是否与之匹配。
  5.         len_s = len(s)
  6.         if len_s < 2:
  7.             return False
  8.         for item in s:
  9.             stack_len = len(stack)
  10.             if item == "(" or item == "[" or item == "{":
  11.                 stack.append(item)
  12.             if item == ")":
  13.                 if stack_len != 0 and stack[-1] == "(":
  14.                     stack.pop()
  15.                 else:
  16.                     return False
  17.             elif item == "]":
  18.                 if stack_len != 0 and stack[-1] == "[":
  19.                     stack.pop()
  20.                 else:
  21.                     return False
  22.             elif item == "}":
  23.                 if stack_len != 0 and stack[-1] == "{":
  24.                     stack.pop()
  25.                 else:
  26.                     return False
  27.             
  28.             i += 1
  29.         # 操作之后,栈空则全部符合,否则无效
  30.         if len(stack) == 0:
  31.             return True
  32.         else:
  33.             return False
  34.             
  35.                
  36.         
  37. if __name__ == '__main__':
  38.     s = Solution()
  39.     a = "){}"
  40.     print(s.isValid(a))
复制代码
C++代码
  1. #include <iostream>
  2. #include <stack>
  3. using namespace std;
  4. class Solution {
  5. public:
  6.     bool isValid(string s) {
  7.     // 创建字符栈
  8.         stack<char> myStack;
  9.         int len_s = s.size();
  10.         if (len_s < 2) return false;
  11.         int i;
  12.         for (i = 0; i < len_s; i++){
  13.             int stack_len = myStack.size(); // 获得栈大小
  14.             if (s[i] == '(' || s[i] == '[' || s[i] == '{')
  15.                     myStack.push(s[i]);
  16.             else if (s[i] == ')') {
  17.                 if (stack_len != 0 && myStack.top() == '(') myStack.pop();
  18.                 else return false;
  19.             }
  20.             else if (s[i] == ']') {
  21.                 if (stack_len != 0 && myStack.top() == '[') myStack.pop();
  22.                 else return false;
  23.             }
  24.             else if (s[i] == '}') {
  25.                 if (stack_len != 0 && myStack.top() == '{') myStack.pop();
  26.                 else return false;
  27.             }
  28.         }
  29.         return myStack.empty(); // 检查栈是否为空
  30.     }
  31. };
  32. int main() {
  33.     Solution s;
  34.     string a = "())";
  35.     cout << s.isValid(a) << endl;
  36.     return 0;
  37. }
复制代码
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代码
  1. # Definition for singly-linked list.
  2. class ListNode:
  3.     def __init__(self, x):
  4.         self.val = x
  5.         self.next = None
  6. class Solution:
  7.     def hasCycle(self, head: ListNode) -> bool:
  8.         # 使用快慢指针,快指针每次走两个结点,慢指针每次走一个结点,当快指针遇上慢指针则存在环
  9.         fast = head
  10.         slow = head
  11.         while fast:
  12.             if fast.next:
  13.                 fast = fast.next.next
  14.             else:
  15.                 break
  16.             slow = slow.next
  17.             if fast == slow:
  18.                 return True
  19.             
  20.         return False
  21. def CreateListNode(l1):
  22.     head = ListNode(l1[0])
  23.     node = head
  24.     for i in range(1, len(l1)):
  25.         new_head = ListNode(l1[i])
  26.         node.next = new_head
  27.         node = new_head
  28.     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]
提示:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表