LeetCode: 20. Valid Parentheses(有效字符串)

清疚 2022-11-27 08:59 187阅读 0赞

文章最前: 我是Octopus,这个名字来源于我的中文名—章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

相关文章:

  1. LeetCode:55. Jump Game(跳远比赛)
  2. Leetcode:300. Longest Increasing Subsequence(最大增长序列)
  3. LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)

文章目录

一.题目描述

二. 实现方式 1

  1. java实现方式

  2. python实现方式

三.实现方式2

1.java实现方式

  1. 2 pyhton实现方式

一.题目描述

  1. 定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。
  2. 有效字符串需满足:
  3. 左括号必须用相同类型的右括号闭合。
  4. 左括号必须以正确的顺序闭合。
  5. 注意空字符串可被认为是有效字符串。
  6. 示例 1:
  7. 输入: "()"
  8. 输出: true
  9. 示例 2:
  10. 输入: "()[]{}"
  11. 输出: true
  12. 示例 3:
  13. 输入: "(]"
  14. 输出: false
  15. 示例 4:
  16. 输入: "([)]"
  17. 输出: false
  18. 示例 5:
  19. 输入: "{[]}"
  20. 输出: true

二. 实现方式 1

1. java实现方式

  1. /**
  2. * 判断是否是有效字符串
  3. *
  4. * @param s 字符串
  5. * @return 布尔值
  6. */
  7. public boolean isValid(String s) {
  8. if (s.length() % 2 == 0) {
  9. return false;
  10. }
  11. Deque<Character> stack = new LinkedList<>();
  12. for (char ch : s.toCharArray()) {
  13. if (ch == '{' || ch == '(' || ch == '[') {
  14. stack.push(ch);
  15. } else if (ch == ']') {
  16. if (!stack.isEmpty() && stack.pop() != '[') {
  17. return false;
  18. }
  19. } else if (ch == ')') {
  20. if (!stack.isEmpty() && stack.pop() != '(') {
  21. return false;
  22. }
  23. } else {
  24. if (!stack.isEmpty() && stack.pop() != '{') {
  25. return false;
  26. }
  27. }
  28. }
  29. return stack.isEmpty();
  30. }

2. python实现方式

  1. def is_valid(s: str) -> bool:
  2. """
  3. 判断括号是否匹配
  4. Args:
  5. s:括号字符串
  6. Returns:
  7. 布尔值
  8. """
  9. if len(s) % 2 == 1:
  10. return False
  11. stack = []
  12. for ch in s:
  13. if ch == '[' or ch == '(' or ch == '{':
  14. stack.append(ch)
  15. elif ch == ']':
  16. if not stack or stack.pop() != '[':
  17. return False
  18. elif ch == ')':
  19. if not stack or stack.pop() != '(':
  20. return False
  21. else:
  22. if not stack or stack.pop() != '{':
  23. return False
  24. return not stack

时间复杂度:O(n)

空间复杂度:O(n)


三.实现方式2

1.java实现方式

  1. /**
  2. * 判断是否是有效字符串
  3. *
  4. * @param s 字符串
  5. * @return 布尔值
  6. */
  7. public boolean isValid2(String s) {
  8. Deque<Character> stack = new LinkedList<>();
  9. for (char ch : s.toCharArray()) {
  10. if (ch == '{') {
  11. stack.push('}');
  12. } else if (ch == '(') {
  13. stack.push(')');
  14. } else if (ch == '[') {
  15. stack.push(']');
  16. } else if (stack.isEmpty() || ch != stack.pop()) {
  17. return false;
  18. }
  19. }
  20. return stack.isEmpty();
  21. }

2 pyhton实现方式

  1. def is_valid2(s: str) -> bool:
  2. """
  3. 判断括号是否匹配
  4. Args:
  5. s:括号字符串
  6. Returns:
  7. 布尔值
  8. """
  9. stack = []
  10. for ch in s:
  11. if ch == '[':
  12. stack.append(']')
  13. elif ch == '(':
  14. stack.append(')')
  15. elif ch == '{':
  16. stack.append('}')
  17. elif not stack or ch != stack.pop():
  18. return False
  19. return not stack

时间复杂度:O(n)

空间复杂度:O(n)

发表评论

表情:
评论列表 (有 0 条评论,187人围观)

还没有评论,来说两句吧...

相关阅读