判断字符串括号是否合法

栈:先进后出(LIFO)顺序

Stack<Character> t = new Stack<Character>();

t.push('a');

t.push('b');

t.peek(); // 这里得到栈顶元素'b'

t.pop();  // 这里将栈顶元素'b'弹出

t.peek(); // 此时栈顶元素为'a'

t.pop();  // 这里将栈顶元素'a'弹出

【题目】字符串中只有字符'('和')'。合法字符串需要括号可以配对。比如:

输入:"()"

输出:true

解释:(),()(),(())是合法的。)(,()(,(()是非法的。

请你实现一个函数,来判断给定的字符串是否合法

package leetcode;

import java.util.Stack;

public class StackSolution {
    public boolean isValid(String s){
        // 当字符串本来就是空的时候,我们可以快速返回true
        if(s == null || s.length() == 0){
            return true;
        }
        // 当字符串长度为奇数的时候,不可能是一个有效的合法字符串
        if(s.length() % 2 ==1){
            return false ;
        }
        Stack<Character> t =  new Stack<Character>();
        for(int i=0 ; i < s.length();i++){
            // 取出字符
            char c= s.charAt(i);
            if(c =='('){
                // 如果是'(',那么压栈
                t.push(c);
            }else if(c == ')'){
                // 如果是')',那么就尝试弹栈
                if(t.empty()){
                    // 如果弹栈失败,那么返回false
                    return false ;
                }
                t.pop();
            }
        }
        return t.empty();
    }
    public static  void main(String[] argv){
        unitTest.run();
       // StackSolution stackSolution = new StackSolution();
        //System.out.println(stackSolution.isValid("())"));
    }
}
class unitTest {
    private static StackSolution stackSolution = new StackSolution();
    public static void testEmptyString(){
        assert stackSolution.isValid(null);
        assert stackSolution.isValid("");
    }
    public static void testSingleChar(){
        assert  !stackSolution.isValid("(");
        assert  !stackSolution.isValid(")");
    }
    public static void testTwoChars(){
        assert stackSolution.isValid("()");
        assert !stackSolution.isValid("((");
        assert !stackSolution.isValid("))");
        assert !stackSolution.isValid(")(");
    }
    public static void test3Chars(){
        assert !stackSolution.isValid("())");
        assert !stackSolution.isValid("(((");
        assert !stackSolution.isValid(")))");
        assert !stackSolution.isValid(")()");
    }
    public static void test4Chars(){
        assert stackSolution.isValid("()()");
        assert stackSolution.isValid("(())");
        assert !stackSolution.isValid("))((");
    }
    public static void testOther(){
        System.out.println("----testother start ------");
        assert stackSolution.isValid("()()()");
        assert stackSolution.isValid("((()))");
        assert stackSolution.isValid("()(())");
        assert !stackSolution.isValid("()(()(");
        System.out.println(!stackSolution.isValid("()(()("));
    }
    public static  void run(){
        testEmptyString();
        testSingleChar();
        testTwoChars();
        test3Chars();
        test4Chars();
        testOther();
        System.out.println("test over");
    }
}

 

上一篇:Python assert断言函数及用法


下一篇:java 断言 assert