轉載:https://www.baidu.com/link?url=6dW_u9HhpUQOnqOhVax4fk01dBCAcES1y8oQZBxfaIK2Agc7VaEZ2sy_f8xowxw_xAl8NVzS_WdBUWvK9WrjUq&wd=&eqid=c21b6e190005af5d000000055e8dbd2d
思想:對於棧這種數據結構的理解與應用
題目:只包含六中字符組合的字符串類型,判斷一個這樣組合的字符串是否合法?
“[{}]” :合法的
“((([{}])))” :合法的
“]{}()[” :不合法的
“((([]))}” :不合法的
代碼:
public boolean isValid(String test) {
//創建一個棧類型數據儲存結構,規定泛型為Character;
Stack<Character> ns=new Stack<Character>();
//創建一個Map類型來一一對應並規定(),{},[]成雙的關系表示;
Map<Character,Character> map=new HashMap<Character,Character>();
map.put(')','(');
map.put('}','{');
map.put(']','[');
for(int i=0;i<test.length();i++){
//將字符串轉化為字符數組
char temp=test.charAt(i);
//因為(,{,[總是在另一半的前面
if(temp=='(' || temp=='{' || temp=='[') {
//將字符壓入棧中
ns.push(test.charAt(i));
}else{
//獲取現在該字符的另一半配對的字符元素,通過鍵值獲得value值
char topStack=map.get(temp);
//判斷是否棧空了,棧空了說明該元素永遠對配不了對,進而說明該字符串不合法
if(ns.isEmpty()){
return false;
}
//判斷兩者字符是否相等
if(topStack!=ns.pop()){
return false;
}
}
}
return ns.isEmpty();
}
解析:棧這種類型數據是:"先進后出的";
解題思路:如果是(,{,[就壓入棧中,如果是),},]就不用壓並取出棧頂元素.如果取出的元素與剛剛的元素不是一對的話,就說明不合法!