1

题目详情

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.

输入一个字符串s,这个字符串是由字符'(', ')', '{', '}', '[' 和 ']'组成的。我们需要判定这个字符串的格式是否有效。判定是否有效的一句就是,字符必须严格有序。例如"()" 和 "()[]{}"是有效的,但是"()"和"()[]{}"就是无效的。

想法

  • 这道题目比较适合用栈作为存储中间结果的数据结构,因为字符应当是后进先出,方便我们进行判断。
  • 对于前一半字符(eg.‘(’,'[','{'),我们对它们进行入栈操作。
  • 如果遇到了后半字符,我们需要对栈顶元素取出,并判断栈顶字符和当前字符是否匹配。如果不匹配,即整个字符串无效。
  • 当整个字符串的遍历结束的时候,判断栈是否为空(完全匹配)。

解法

        Stack<Character> save = new Stack<Character>();
        if(s.length() == 0)return true;
        
        for(char c : s.toCharArray()){
            if(c == '('){
                save.push(')');
            }else if (c == '['){
                save.push(']');
            }else if (c == '{'){
                save.push('}');
            }else if (save.isEmpty() || c != save.pop()){
                return false;
            }
        }
        
        return save.isEmpty();

soleil阿璐
350 声望45 粉丝

stay real ~