[ 问题: ]
Given a string containing just the characters ‘(‘, ‘)‘, ‘{‘, ‘}‘, ‘[‘ and ‘]‘, determine if the input string is valid.
直译:给定一个字符串,该串包含字符‘(‘, ‘)‘, ‘{‘, ‘}‘, ‘[‘, ‘]‘, 请判断它是不是有效的
The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.
[ 解法: ]
解题思路:使用堆栈数据结构, 进入的字符如果不能左右匹配就压栈,如果可以匹配就弹栈,并开始下一次循环。
当循环结束后,如果堆栈仍为空的话,说明是有效的括号。
import java.util.HashMap; import java.util.Map; import java.util.Stack; public class Solution { public static void main(String[] args) { System.out.println(new Solution().isValid("{[()]}")); } public boolean isValid(String s) { if (s != null && !"".equals(s.trim())) { // init the character map Map<Character, Character> map = init(); Stack<Character> stack = new Stack<Character>(); char[] ch = s.toCharArray(); for (int i = 0; i < ch.length; i++) { // the first time come into the loop if (stack.size() == 0) { stack.push(ch[i]); } else { Character pre = stack.peek(); if (pre.equals(map.get(ch[i]))) { stack.pop(); continue; } stack.push(ch[i]); } } // the stack is empty if (stack.size() == 0) { return true; } } return false; } /** * data init. * @return Map<Character> */ public Map<Character, Character> init() { Map<Character, Character> map = new HashMap<Character, Character>(); map.put('(', ')'); map.put(')', '('); map.put('{', '}'); map.put('}', '{'); map.put('[', ']'); map.put(']', '['); return map; } }
时间: 2024-10-11 21:24:55