20. 有效的括号

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

有效字符串需满足:

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

 

示例 1:

输入:s = "()"
输出:true

示例 2:

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

示例 3:

输入:s = "(]"
输出:false

示例 4:

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

示例 5:

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

 

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Stack;

public class Solution20 {
	public boolean isValid(String s) {
		Stack<String> stk = new Stack<String>();
		if (s.length() % 2 == 1) {
			return false;
		}

		for (int i = 0; i < s.length(); i++) {
			String c = s.substring(i, i + 1);
			// System.out.println("c is:" + c);
			if ("(".equals(c) || "[".equals(c) || "{".equals(c)) {
				// System.out.println("push" + c);
				stk.push(c);
			} else {
				if (stk.isEmpty()) {
					return false;
				}
				String p = stk.pop();
				// System.out.println(p);
				if (")".equals(c)) {
					if (!"(".equals(p)) {
						return false;
					}
				}
				if ("]".equals(c)) {
					if (!"[".equals(p)) {
						return false;
					}
				}
				if ("}".equals(c)) {
					if (!"{".equals(p)) {
						return false;
					}
				}
			}

		}
		if (stk.size() > 0) {
			return false;
		}

		return true;
	}

	public static void main(String[] args) {

		Solution20 sol = new Solution20();

		String s = "){";

		System.out.println(sol.isValid(s));
	}
}

 

上一篇:Feel Good POJ - 2796


下一篇:战略游戏[SDOI2018]