242. Valid Anagram
題目網址:https://leetcode.cn/problems/valid-anagram/
題意:給兩 string s 和 t, 返回 t 是否為 s 的字母異位詞(Anagram) 則返回 true, 其中 s 和 t 僅由小寫字母所組成。
字母異位詞 (Anagram) 定義:若 s 和 t 中每個字母的出現次數都相同, 則 s 和 t 互為字母異位詞。
進階:若 input string 包含 Unicode char, 你要如何調整你的解法?
Solution 1:
想法:將 s、t 進行排序, 若排序後 s、t 相等, 就代表為 anagram
class Solution {public: bool isAnagram(string s, string t) { if (s.size() != t.size()) { return false; } sort(s.begin(), s.end()); sort(t.begin(), t. ...
167. Two Sum II - Input Array Is Sorted
題目網址:https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/
題意:給一 index 從 1 開始的整數 array numbers, 該 array 已按照非遞減順序排列, 請從 numbers 中找出相加等於 target 的兩數之 index index1、index2, 其中 1 ≤ index1 ≤ index2 ≤ numbers.length。
假設每一種 target 只會對應到一組解, 且同一個元素不可重複使用。
請設計 $O(1)$ space 的演算法。
Solution:
想法:概念同 15. 3Sum, 由於 array 已排序, 故直接使用 Two Pointers 即可
class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { int left = 0, right = numbers.size() - 1 ...
125. Valid Palindrome
題目網址:https://leetcode.cn/problems/valid-palindrome/
題意:給一 string s, 將其大寫轉換成小寫、並移除非字母和數字的 char, 返回轉換後是否為迴文。
Solution:
想法:利用 Two pointers, 若當前的 char 不為數字 or 字母則跳過, 直到 left、right 相會。判斷式為 left < right 即可, 因為 left == right 時 s[left]、s[right] 必相等, 因此不用判斷
class Solution {public: bool isPalindrome(string s) { int left = 0, right = s.size() - 1; while (left < right) { // 注意:這裡更新時還是要保持 left < right while (left < right && !isalnu ...
20. Valid Parentheses
題目網址:https://leetcode.cn/problems/valid-parentheses/
題意:給一只包含 '('、')'、'{'、'}'、'['、']' 的 string s, 判斷 s 是否有效。
有效的定義如下:
左括號必須有相同類型的右括號閉合
左括號必須以正確的順序閉合
每個右括號都有一個對應的相同類型之左括號
Solution:
想法:利用 Stack
class Solution {public: bool isValid(string s) { if (s.size() % 2 == 1) { return false; } stack<char> stk; for (const auto& ch : s) { if (pairs.find(ch) != ...
36. Valid Sudoku
題目網址:https://leetcode.cn/problems/valid-sudoku/
題意:判斷 9 x 9 數獨是否有效, 根據以下規則, 判斷已填入的數字是否有效即可。
數字 1 - 9 在每一行只能出現一次
數字 1 - 9 在每一列只能出現一次
數字 1 - 9 在每一個 3 x 3 九宮格中只能出現一次
空白格以 '.' 表示。
Solution:
想法:一旦 board[r][c] 不為 '.', 就去判斷該 row、col、block 是否有重複的 char
class Solution {public: bool isValidSudoku(vector<vector<char>>& board) { for (int r = 0; r < 9; ++r) { for (int c = 0; c < 9; ++c) { const char target = b ...