【面試算法題】Java Stack 類的使用

Java Stack 類
棧是Vector的一個子類,它實現了一個標準的後進先出的棧。
堆棧只定義了默認構造函數,用來創建一個空棧。

常用方法
1 boolean empty()
測試堆棧是否爲空。

2 Object peek( )
查看堆棧頂部的對象,但不從堆棧中移除它。

3 Object pop( )
移除堆棧頂部的對象,並作爲此函數的值返回該對象。

4 Object push(Object element)
把項壓入堆棧頂部。

5 int search(Object element)
返回對象在堆棧中的位置,以 1 爲基數。

題目:

給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。

有效字符串需滿足:
1、左括號必須用相同類型的右括號閉合。
2、左括號必須以正確的順序閉合。
3、注意空字符串可被認爲是有效字符串。

如:"(([]){})"

題解:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Stack;

public class TestHashMapBoolean {

    public static boolean isValid(String s) {

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

        HashMap<Character,Boolean> sbool = new HashMap<Character,Boolean>();
        sbool.put('(',true);
        sbool.put('{',true);
        sbool.put('[',true);
        sbool.put(')',false);
        sbool.put('}',false);
        sbool.put(']',false);

        ArrayList<Character> sList=new ArrayList<Character>();

        for(int i=0; i<s.length();i++){
            sList.add(s.charAt(i));
        }

        if(sList.size() == 0){
            return true;
        }

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

        for(int i=0; i<sList.size();i++){
            if(stack.empty()) {
                stack.push(sList.get(i));
            }else if (sbool.get(stack.peek()) && ss.get(stack.peek()).equals(sList.get(i))) {
                stack.pop();
            }else {
                stack.push(sList.get(i));
            }

            }

        return stack.size() == 0 ? true:false;

        }

    public static void main(String[] args) {
        System.out.println(isValid("(([]){})"));

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章