20. 有效的括号

x33g5p2x  于2021-09-19 转载在 其他  
字(1.2k)|赞(0)|评价(0)|浏览(432)

题目:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
*
示例 1:
输入:s = “()”
输出:true
*
示例 2:
输入:s = “()[]{}”
输出:true

解题思路

括号配对,可以利用栈结构,因为栈是先进后出,也就是后进先出的。每次对栈弹出的元素以及栈是否为空进行判断就OK了。当然奇数长度肯定不对的

代码实现

  1. import java.util.Stack;
  2. class Solution {
  3. public boolean isValid(String s) {
  4. int n = s.length();
  5. if (n % 2 == 1) {
  6. return false;
  7. }
  8. Stack<Character> stack = new Stack<>();
  9. char temp;
  10. for(char i:s.toCharArray()){
  11. if(i == '(' || i == '[' || i == '{'){
  12. stack.push(i);
  13. }else if(i == ')'){
  14. if(stack.isEmpty())
  15. {
  16. return false;
  17. }
  18. temp = stack.pop();
  19. if(temp != '(')
  20. {
  21. return false;
  22. }
  23. }else if(i == ']'){
  24. if(stack.isEmpty())
  25. {
  26. return false;
  27. }
  28. temp = stack.pop();
  29. if(temp != '[')
  30. {
  31. return false;
  32. }
  33. }else if(i == '}'){
  34. if(stack.isEmpty())
  35. {
  36. return false;
  37. }
  38. temp = stack.pop();
  39. if(temp != '{')
  40. {
  41. return false;
  42. }
  43. }
  44. }
  45. if(stack.isEmpty())
  46. return true;
  47. else
  48. return false;
  49. }
  50. }

看起来不太舒服所以又优化了一下

  1. import java.util.Stack;
  2. class Solution {
  3. public boolean isValid(String s) {
  4. int n = s.length();
  5. if (n % 2 == 1) {
  6. return false;
  7. }
  8. Stack<Character> stack = new Stack<>();
  9. char temp;
  10. for(char c:s.toCharArray()){
  11. if(c == '(' || c == '[' || c == '{') // 入栈
  12. stack.push(c);
  13. else
  14. {
  15. if(stack.isEmpty()) //为空肯定是错的
  16. return false;
  17. temp = stack.pop(); // 弹出栈顶元素
  18. if(c == ')' && temp != '(') //判断是否匹配
  19. return false;
  20. if(c == ']' && temp != '[')
  21. return false;
  22. if(c == '}' && temp != '{')
  23. return false;
  24. }
  25. }
  26. return stack.isEmpty();
  27. }
  28. }

相关文章