給定乙個只包括 '(',')','','[',']' 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "(){}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: ""
輸出: true
演算法:
(1)初始化棧 s。
(2)一次處理表示式的每個括號。
(3)如果遇到開括號,我們只需將其推到棧上即可。這意味著我們將稍後處理它,讓我們簡單地轉到前面的 子表示式。
(4)如果我們遇到乙個閉括號,那麼我們檢查棧頂的元素。如果棧頂的元素是乙個 相同型別的 左括號,那麼我們將它從棧中彈出並繼續處理。否則,這意味著表示式無效。
(5)如果到最後我們剩下的棧中仍然有元素,那麼這意味著表示式無效。
方法一:
class solution方法二:if (s.size()%2)
return false;
mapsmap = ,
', ',
};stackst;
for (int i = 0; i < s.size(); i++)
else
else
}if (st.size() > s.size() / 2)
}return st.empty();
}};
class solution ;vectors2 = '};
if (count(s2.begin(), s2.end(), s[0]) != 0)
return false;
if (s.size() % 2 != 0)
return false;
stackres;
int start = 0;
char top;
while(start < s.size())
else if (count(s2.begin(), s2.end(), s[start]) != 0)}}
if (res.empty())
return true;
else
return false;
}};
leetcode刷題系列
題目 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。解題思路 如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1 如果最右邊的1後面還有0的話 其餘所有位將不會受到影響。舉個例子 乙個二進...
LeetCode刷題系列1
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...
LeetCode刷題系列4
給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...