js實現有效的括號 力扣

2021-10-06 09:54:58 字數 1703 閱讀 6643

目錄

1 題目

2 輸入輸出

3 解法  使用棧

1)使用陣列儲存左右括號

2)使用map儲存對應的括號

4 **

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

有效字串需滿足:

注意空字串可被認為是有效字串。

示例 1:

輸入: "()"

輸出: true

示例 2:

輸入: "(){}"

輸出: true

示例 3:

輸入: "(]"

輸出: false

示例 4:

輸入: "([)]"

輸出: false

示例 5:

輸入: ""

輸出: true

棧後進先出特點恰好與本題括號排序特點一致,即若遇到左括號入棧,遇到右括號時將棧頂元素出棧,如果棧頂元素與右括號匹配,繼續遍歷,否則是無效括號;遍歷完所有括號後 stack 仍然為空=》有效,否則無效。

下面為兩種**,第一種所需空間大,時間也長

左括號為鍵,右括號為值。(時間和空間更優)

/**

* @param str

* @return

* 功能:有效括號 使用棧的方法,可以使用陣列儲存左右括號,也可以使用多個if(switch語句),當項數多(括號多)的時候,多個if**太長。。。

*/ var isvalid = function(str) */

let stack = ; //js中一般使用陣列實現棧

let left = ["(", "[", ""]; //右括號

let len = str.length; //效能優化,不必每次迴圈都計算一次str.length

for(let i = 0; i < len; i++)

else if(right.indexof(str[i]) !== -1)

else }}

}//如果為空字串時,那麼棧一直為空,不需要特意寫判斷為空的**

return !stack.length; //棧為空時,返回true,否則返回false

};/**

* @param str

* @return

* 功能:有效括號 使用棧的方法,結合資料結構map

*/ var isvalid_2 = function(str) */

let stack = ; //js中一般使用陣列實現棧

let map = new map([  //使用map查詢速度還有記憶體消耗比陣列低

["(", ")"],  //鍵用做括號表示,對應值為對應的右括號

["[", "]"],

[""]

]);let len = str.length; //效能優化,不必每次迴圈都計算一次str.length

for(let i = 0; i < len; i++)

else

else }}

}//如果為空字串時,那麼棧一直為空,不需要特意寫判斷為空的**

return !stack.length; //棧為空時,返回true,否則返回false

};console.log(isvalid_2("()"));

參考:力扣

百里於2023年5月23日

力扣 20 有效的括號

題目 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例1 輸入 輸出 true 示例2 輸入 輸出 true 示例3 輸入 輸出 false 示例4 輸入 輸出 false 示例5 輸入 輸出 ...

力扣 20 有效的括號

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...

有效的括號(力扣 20)

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...