20.有效的括號
題目描述:給定一個只包括 '('蹭睡,')'衍菱,'{','}'肩豁,'['脊串,']' 的字符串,判斷字符串是否有效清钥。有效字符串需滿足:
左括號必須用相同類型的右括號閉合琼锋。
左括號必須以正確的順序閉合。
注意空字符串可被認為是有效字符串祟昭。
思路分析:借助棧的后進先出特性缕坎,去存儲字符串。遍歷字符串篡悟,遇到左括號則入棧谜叹;遇到右括號則將當前棧頂元素pop出來,并判斷是否為對應(yīng)的左括號搬葬,若不是則返回false荷腊。遍歷完成后,該棧應(yīng)該為空急凰。
var isValid = function(s) {
let arr = []
let len = s.length
if (len%2) return false
for (let i = 0; i < len; i++) {
let letter = s[i]
switch(letter) {
case "(": {
arr.push(letter)
break;
}
case "[": {
arr.push(letter)
break;
}
case "{": {
arr.push(letter)
break;
}
case ")": {
if (arr.pop() !== "(") return false
break;
}
case "]": {
if (arr.pop() !== "[") return false
break;
}
case "}": {
if (arr.pop() !== "{") return false
break;
}
}
}
return arr.length === 0;
};
1047.刪除字符串中的所有相鄰重復(fù)項
題目描述:給出由小寫字母組成的字符串 S女仰,重復(fù)項刪除操作會選擇兩個相鄰且相同的字母,并刪除它們抡锈。在 S 上反復(fù)執(zhí)行重復(fù)項刪除操作董栽,直到無法繼續(xù)刪除。在完成所有重復(fù)項刪除操作后返回最終的字符串企孩。答案保證唯一锭碳。
思路分析:
使用一個棧進行存儲,使用for of遍歷字符串勿璃,若棧頂?shù)脑睾彤斍氨闅v字符相等則pop出去擒抛,遍歷下一個字符;若不相等則將當前遍歷字符push進棧补疑。
var removeDuplicates = function(S) {
let stack = [];
for (i of S) {
let temp = stack.pop();
if (i !== temp) {
stack.push(temp);
stack.push(i);
}
}
return stack.join('');
};