原始題目如下:(5kyu)
Write a function called that takes a string of parentheses, and determines if the order of the parentheses is valid. The function should return true if the string is valid, and false if it's invalid.
翻譯:
判斷括號是否成雙成對。
範例:
"()" => true
")(()))" => false
"(" => false
"(())((()())())" => true
function validParentheses(parens){
let pair={
')':'(',
}
let stack=[]
for(let i=0 ; i<parens.length;i++){
stack.length===0?
stack.push(parens[i]):stack[stack.length-1]===pair[parens[i]]?stack.pop():stack.push(parens[i])
}
return stack.length===0?true:false
}
和先前的Valid Braces或是Directions Reduction是一樣的概念,可見這類型題目多多多重要(?)
一樣是stack
先進後出的概念,宣告一stack
陣列,一一遍歷parens
中的元素
stack
為空,將目前parens[i]
放入stack
中stack
不為空,判斷目前stack最後一個元素和parens[i]
是否成對
stack
最後一個元素parens[i]
放入stack
中最後看stack
有無元素,就知道括號結果是成雙成對還是落單(?)
function validParentheses(parens){
var re = /\(\)/;
while (re.test(parens)) parens = parens.replace(re, "");
return !parens;
}
有用到之前Directions Reduction整理到的正規表示式Method,while
搭配 regexp.test()
當parens
有()
出現,就進行替換!
function validParentheses(parens){
var n = 0;
for (var i = 0; i < parens.length; i++) {
if (parens[i] == '(') n++;
if (parens[i] == ')') n--;
if (n < 0) return false;
}
return n == 0;
}
(
加1;)
減一的概念,一一遍歷parens
中的元素,使用n
來計量,每次n
變動完,都check目前的n
是否為正。
以上為今日分享的內容,若有錯誤或是建議,請再隨時和我聯繫。