LeetCode ---- 20.有效的括号 (字符串,栈)

题目描述

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

有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:
输入: “()”
输出: true

示例 2:
输入: “()[]{}”
输出: true

示例 3:
输入: “(]”
输出: false

示例 4:
输入: “([)]”
输出: false

示例 5:
输入: “{[]}”
输出: true

思路:把字符串中左括号的值存进一个栈中,若取到第一个不为左括号的值(即为右括号), 此时可以进行弹栈并进行左右括号的匹配处理,若有一个不符合直接跳出循环(题中的判断主要是为了验证栈空与非空对题目的影响)

import java.util.Stack;
class Solution {
    public boolean isValid(String s) {
     
		//1.第一种情况,若为""直接返回true
		if(s.equals("")) {
			return true;
		}
		
		//2.第二种情况,判断左右括号匹配(中间的判断只是为了整体的合理性)
		Stack<String> stack1 = new Stack<String>();
		boolean flag = false;
		for(int i = 0; i < s.length(); i++) {
			if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') {
				stack1.push(s.charAt(i)+"");
			}else {
				//2.1 若取右边括号时,栈为空则证明无左括号
				if(!stack1.isEmpty()) {
					//取出右括号的值
					String temp = s.charAt(i)+"";
					//弹出栈中左括号的值
					String temp_l = stack1.pop();
					//System.out.println(temp_l+":"+temp);
					//进行左右括号的匹配
					if((temp_l.equals("(")  && temp.equals(")")) ||
					   (temp_l.equals("[")  && temp.equals("]")) ||	
					   (temp_l.equals("{")  && temp.equals("}"))) {
						flag = true;
					}else {
						//若有一个不符合,直接跳出
						flag = false;
						break;
					}
				}else {
					flag = false;
				}
			}
		}
		//若栈非空,则还有左括号未匹配
		if(!stack1.isEmpty()) {
			flag = false;
		}
		
		return flag;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章