当前位置: 代码迷 >> 综合 >> leetcode—20
  详细解决方案

leetcode—20

热度:74   发布时间:2024-02-21 06:06:00.0

20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

 

class Solution {public boolean isValid(String s) {//判断字符串的长度//isEmpty()	分配了内存空间,值为空,是绝对的空,是一种有值(值 = 空)//""	分配了内存空间,值为空字符串,是相对的空,是一种有值(值 = 空字串)//null	是未分配内存空间,无值,是一种无值(值不存在)if(s == null){return false;}if(s.isEmpty()){return true;}//先进后出,使用栈//boolean empty() : 测试堆栈是否为空。//Object peek( ) : 查看堆栈顶部的对象,但不从堆栈中移除它。//Object pop( ) : 移除堆栈顶部的对象,并作为此函数的值返回该对象。//Object push(Object element) : 把项压入堆栈顶部。//int search(Object element) : 返回对象在堆栈中的位置,以 1 为基数。Stack<Character> stack = new Stack<Character>();//遍历字符串/*for(int i=0;i < str.length();i++) {System.out.println(str.charAt(i)); }*//*for(int i=0;i < str.length();i++) {System.out.println(str.substring(i,i+1)); }*///无序列表 有序列表根据出现的左括号依次将对应的右括号入栈。//无序列表 有序列表stack.empty() 为true即确定有非指定的括号。所以不符合,return false;//无序列表c!=stack.pop()为true即确定右括号闭合出错。所以不符合,return false;//无序列表stack.pop() 这个语句会根据s中的右括号而多次执行执行取出栈顶元素,顺利的话,最后stack.empty为空则true。char[]  c = s.toCharArray();for(int i = 0;i < c.length;i++) {//判断字符并压栈if(c[i] == '('){stack.push(')');}else if(c[i] == '{'){stack.push('}');}else if(c[i] == '['){stack.push(']');}else if(stack.empty() || c[i] != stack.pop()){return false;}}return stack.empty();}
}