題目描述:
給定一個只包括 '(',')'瑞你,'{','}'春感,'['虏缸,']' 的字符串 s 鲫懒,判斷字符串是否有效刽辙。
有效字符串需滿足:
- 左括號必須用相同類型的右括號閉合。
- 左括號必須以正確的順序閉合宰缤。
示例1:
輸入:s = "()"
輸出:true示例2:
輸入:s = "()[]{}"
輸出:true示例3:
輸入:s = "(]"
輸出:false示例4:
輸入:s = "([)]"
輸出:false示例5:
輸入:s = "{[]}"
輸出:true提示:
- 1 <= s.length <= 10^4
- s 僅由括號 '()[]{}' 組成
進階:你能不將整數(shù)轉為字符串來解決這個問題嗎晃洒?
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-parentheses
思路:
- 用到了棧的思想
代碼:
var isValid = function(s) {
let i,j=0,len=s.length,arr=new Array();
for(i=0;i<len;i++){
if(Map[s[i]]>=1&&Map[s[i]]<=3){
arr[j++]=Map[s[i]];
}else if(arr.length!=0&&Map[s[i]]==(arr[arr.length-1]+3)){
arr.pop();//刪除數(shù)組的最后一個元素
j--;
}else{
return false;
}
}
if(arr.length == 0)
return true;
else
return false;
};
const Map = {
'(':1,
'[':2,
'{':3,
')':4,
']':5,
'}':6
}
執(zhí)行結果:
image.png
改進解法:
思路:
- 優(yōu)化了映射對象
代碼:
var isValid = function(s) {
const stack = [],
map = {
"(":")",
"{":"}",
"[":"]"
}
for(const i of s){
if(i in map){
stack.push(i);
}else if(i!=map[stack.pop()]){
return false;
}
}
return !stack.length;
};
執(zhí)行結果:
image.png