與括號有關的演算法題解

2021-10-12 12:41:22 字數 951 閱讀 2293

對於這類問題,只需要抓住一條準則:左括號必須大於等於右括號

然後按照以下步驟進行即可求解出所有有效括號。

1.做好引數校驗,即處理括號數為0或1的情況;

2.第乙個必須新增左括號;

3.當左右括號數相等時,判斷是否需要新增到結果集,且下乙個必須新增左括號;

4.當左括號數大於右括號數時,分別進行新增左括號和右括號的遞迴。

class solution 

getparenthesis(n,1,0,"","(",res);

return res;

}public void getparenthesis(int n,int left,int right,string sb,string str,listres)

getparenthesis(n,left+1,right,sb,"(",res);

}else if(left>right)}}

對於此類問題,通過棧先入後出的特性可以很容易的得到解決。

1.使用hashmap建立三種左右括號的對映關係,避免使用if-else進行多次判斷;

2.進行一次for迴圈遍歷字串;

3.使用map.containskey()判斷當前的字元是左括號還是右括號;

4.若為左括號直接壓入棧中;

5.若為右括號,如果此時棧為空或棧頂元素不是對應的左括號,說明無效。若有效則對棧執行一次pop操作;

6.遍歷完成後,棧不為空也說明無效。

class solution ','else                

}else

}//遍歷完成棧不為空,說明無效

return stack.empty();}}

題解 與多公尺諾有關的插頭DP

hdu5731 題意 給你乙個nm的棋盤,我們用12或2 1 即橫著放或豎著放 的骨牌去填充這個棋盤。問你有多少種填法,使得這個棋盤 任意相鄰兩行或兩列之間都必須要有乙個骨牌橫跨。也就是使得這個棋盤為穩定的。題解from phile的空間 先求出不考慮分割線的n m棋盤的覆蓋方案數記為f n m 然...

匹配左括號或者右括號js 演算法題解之最長有效括號

給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。輸入 輸出 2解釋 最長有效括號子串為 輸入 輸出 4解釋 最長有效括號子串為 這題其實大家都能想到要麼用動態規劃,要麼就用棧來解題,這裡講一講用棧來解題的思路 我們可以將棧底元素儲存為已經遍歷過的元素中沒有匹配右括號的下標,主要的做法...

演算法 有效的括號

偽 1.得到字串.2.建立乙個linkedlist 用來模擬stack 2.非空判斷,空返回true 3.遍歷字串 如果第一次碰到三個括號 第乙個括號是右括號必定是錯誤的 如果碰到左括號,給linkedlist中新增對應的右括號,碰到右括號,判斷linkedlist末尾的右括號是否與其匹配,匹配則刪...