判斷字符串中括號是否成對存在


判斷字符串中括號是否成對存在

比如:

()()(())  OK

()[]{}{([])}  OK

((())]  NO

思路:遇到左括號入棧,遇到右括號,將左括號出棧(對應的右括號要存在)

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

public class BracketMatching {
    // pair以右括號為key, 左括號為值
    private Map<Character, Character> pair = null;

    public  BracketMatching()
    {
        pair = new HashMap<Character, Character>();
        pair.put(')', '(');
        pair.put('}', '{');
        pair.put(']', '[');
    }

    public boolean isMatch(String s)
    {
        Stack<Character> sc = new Stack<Character>();
        for (int i = 0; i < s.length(); i++)
        {
            Character ch = s.charAt(i);
            if (pair.containsValue(ch))// 如果是左括號,放入棧中
            {
                sc.push(ch);
            } else if (pair.containsKey(ch)) // 如果是右括號
            {
                if (sc.empty()) // 棧為空,棧頭沒有字符與右括號匹配
                {
                    return false;
                }
                // 棧不為空,棧頭字符與右括號匹配
                if (sc.peek() == pair.get(ch))
                {
                    sc.pop();
                } else //網上許多列子沒有這里的else代碼塊,導致({}[]]])會被判斷為true
                { // 棧不為空,棧頭字符不與右括號匹配
                    return false;
                }
            }

        }

        return sc.empty() ? true : false;
    }

    public static void main(String[] args)
    {
        BracketMatching judger = new BracketMatching();
        System.out.println(judger.isMatch("(***)-[{-------}]")); //true
        System.out.println(judger.isMatch("(2+4)*a[5]")); //true
        System.out.println(judger.isMatch("({}[]]])")); //false
        System.out.println(judger.isMatch("())))")); //false
        System.out.println(judger.isMatch("((()")); //false
        System.out.println(judger.isMatch("(){[[]]}")); //true
    }


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM