?一個新手小白開始算法的學習之路,以后會不定期分享個人做完一些題目的筆記,使用語言為JavaScript
//聲明一個名為isValid的函數,接收一個參數s(要檢查的字符串)
let isValid = function(s) {//初始化棧//創建一個空數組stack,用來存儲遇到的括號( (,{,[ )let stack = [];//開始遍歷,i是索引號(從0開始,所以從length-1結束)for( let i=0;i<s.length;i++) {//將當前字符存儲在變量start中(可能是任何類型的符號)const start = s[i];if( s[i] == '(' || s[i] == '{' || s[i] =='[' ){ //如果是開放字符( (,{,[ ),就壓入棧stack.push( s[i] );//如果不是,則end獲取棧頂元素(最后壓入的開放括號)}else{const end = stack[ stack.length-1 ];if( start ==")" && end == '(' || start =="]" && end == '[' || start =="}" && end == '{' ){//若符合,則出棧stack.pop();}else{//如果閉合括號與棧頂開放括號不匹配:立即返回false,表示字符串無效return false;}}}//遍歷完所有字符后:
//如果棧為空(stack.length == 0),說明所有開放括號都有匹配的閉合括號,返回true
//如果棧不為空,說明有未匹配的開放括號,返回falsereturn stack.length == 0;
};
let isValid = function(s) {let stack = [];for( let i=0;i<s.length;i++) {const start = s[i];if( s[i] == '(' || s[i] == '{' || s[i] =='[' ){stack.push( s[i] );}else{const end = stack[ stack.length-1 ];if( start ==")" && end == '(' ||start =="]" && end == '[' ||start =="}" && end == '{'){stack.pop();}else{return false;}}}return stack.length == 0;};
例子
這個函數就像是一個嚴格的"括號管家",專門檢查你寫的括號是否都正確配對。想象你在玩一個"開箱關箱"的游戲:
游戲規則
- 每次你打開一個箱子(
(
,{
,[
),管家就會記在小本本(棧)上 - 每次你關閉一個箱子(
)
,}
,]
),管家就會:
- 檢查是否和最后一次打開的箱子匹配
- 匹配就劃掉最后一條記錄
- 不匹配就直接宣布游戲失敗
分步情景模擬