iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
佛心分享-刷題不只是刷題

刷經典 LeetCode 題目系列 第 4

經典LeetCode 242. Valid Anagram

  • 分享至 

  • xImage
  •  

在 LeetCode 第 242 題「Valid Anagram」中,我們要檢查兩個字串是否為「相同字母異序詞」(Anagram)。兩個字串如果包含相同數量的字母並且字母的排列順序可以不同,那麼它們就是相同字母異序詞。

題目:
給定兩個字串 st,我們需要判斷它們是否為相同字母異序詞。相同字母異序詞的定義是,兩個字串使用相同的字元,且每個字元的出現次數也相同。

範例:

輸入: s = "anagram", t = "nagaram"
輸出: true

輸入: s = "rat", t = "car"
輸出: false

解題思路

要檢查兩個字串是否為相同字母異序詞,我們需要確保兩個字串中每個字元的出現次數都相同。這可以透過以下幾種方法來實現:

  1. 排序法:將兩個字串都排序,然後比較排序後的結果。如果兩個字串排序後相同,那麼它們就是相同字母異序詞。
  2. 字元計數法:使用一個計數器(例如雜湊表或陣列)來記錄每個字元出現的次數。然後對兩個字串進行字元計數比較,檢查是否每個字元的出現次數相等。

解法1:排序法

先來個排序法。

實作:

class Solution {
public:
    bool isAnagram(string s, string t) {
        sort(s.begin(), s.end());
        sort(t.begin(), t.end());
        if (s == t) {
            return true;
        }
        return false;
    }
};

解法2:字元計數法

另一種字元計數法解法,計算每個字元的出現次數,使用 unordered_map,也可以使用 vector 來存結果。

實作:

class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.size() != t.size())
            return false;

        unordered_map<int, int> map;
        for (int i = 0; i < s.size(); i++) {
            map[s[i]]++;
            map[t[i]]--;
        }

        for (const auto& m : map) {
            if (m.second != 0)
                return false;
        }
        return true;
    }
};

小技巧:

  • map[s[i]]++-- 來判斷次數是否一樣的技巧。

參考:
#242. Valid Anagram


上一篇
經典LeetCode 217: Contains Duplicate
下一篇
經典LeetCode 121. Best Time to Buy and Sell Stock
系列文
刷經典 LeetCode 題目66
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言