20 - Valid Parentheses (Stack)
題目要求
Given a string s containing just the characters '(', ')', ', ', '[' and ']', determine if the input string is valid.
合格字串要求:
- 左括號要有匹配的右括號,如:
( )[ ]{ }
。 - 左括號必須以正確的順序關閉,比如
({ )}
就是以不正確順序閉合的字串,但是如果是({ })
就是合格的字串。
僅滿足上述要求可使用雙重迴圈:
function isValid(s: string): boolean {
// 三種情況: '{}', '{[]}', '{}[]'
const open = ['(', '[', '{']
const close = [')', ']', '}']
// 評斷用的數字
let count = 0
let count2 = 0
// 當陣列元素只有一個直接為 false
s.length < 2 && false
// 處理 '{[]}' 的情況
for(let i = 0; i < s.length/2; i++){
const index = open.indexOf(s[i])
if(s[s.length - i -1] === close[index]){
count += 1
}
}
// 處理 '{}[]' 的情況
for(let i = 0; i < s.length; i += 2){
const index = open.indexOf(s[i])
if(s[i + 1] === close[index]){
count2 += 1
}
}
// 評估
if(count === s.length/2 || count2 === s.length/2){
return true
}else{
return false
}
}
以上程式通過部了第 79 個測試 (([]){})
,。上面的程式會給出 false
的答案,但預期其實是 true
,這是因為少考慮了綜合第一個與第二個條件的第三條件。