链接:https://leetcode.cn/studyplan/top-interview-150/
20. 有用的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有用。
有用字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以准确的次序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
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++代码- #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代码- # 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]
提示:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|