问题

  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

代码

使用jdk提供的栈类

  1. import java.util.Stack;
  2. //leetcode submit region begin(Prohibit modification and deletion)
  3. class Solution {
  4. public boolean isValid(String s) {
  5. Stack<Character> stack = new Stack<>();
  6. for (int i = 0; i < s.length(); i++) {
  7. char c = s.charAt(i);
  8. if (c == '(' || c == '[' || c == '{') {
  9. stack.push(c);
  10. }
  11. if (c == ')' || c == ']' || c == '}') {
  12. if (stack.empty()) {
  13. return false;
  14. }
  15. char top = stack.pop();
  16. if (c == ')' && top != '(') {
  17. return false;
  18. }
  19. if (c == ']' && top != '[') {
  20. return false;
  21. }
  22. if (c == '}' && top != '{') {
  23. return false;
  24. }
  25. }
  26. }
  27. return stack.isEmpty();
  28. }
  29. }