置頂

GeoGebra 文章目錄

GeoGebra 文章目錄  更新日期:2018/2/8 我將 GeoGebra 相關的文章及檔案連結都整理在這篇裡,之後如果有新的文章也會同時更新這個目錄。上傳到 GeoGebraTube 的檔案,我有試著用 Google Chrome 63.0.3239.13...

熱門文章

2026年6月22日 星期一

LeetCode 解題筆記:1189. Maximum Number of Balloons

作者:王一哲
日期:2026年6月22日


LeetCode 題目連結:1189. Maximum Number of Balloons

解題想法


簡單題,題目給定字串 text,要計算用 text 之中的字母可以組成幾個 balloon,每個字母最多只能使用一次。只要先計算 text 之中,字母 a, b, l, o, n 分別有幾個,計算 b, a, n 的數量及 l, o 的數量除以 2,答案是這 5 個數值中的最小值。計算字母數量時可以用表格計數,也可以使用字典計數。

Python 程式碼


dict,建立 dict 物件 cnt 時設定好 key 值,只記錄 a, b, l, o, n 的數量。Runtime: 3 ms, beats 61.87%. Memory: 19.24 MB, beats 75.19%.
class Solution:
    def maxNumberOfBalloons(self, text: str) -> int:
        # 用字典記錄 balon 的字母數量
        cnt = {'b': 0, 'a': 0, 'l': 0, 'o': 0, 'n': 0}
        for c in text:
            if c in cnt:
                cnt[c] += 1
        # 找 ban 字母數量最小值,lo 字母數量 / 2 最小值
        ans = 100000
        for c in "ban":
            ans = min(ans, cnt[c])
        for c in "lo":
            ans = min(ans, cnt[c] // 2)
        return ans

dict,建立 dict 物件 cnt 時設定好 26 個字母的 key 值,記錄所有字母的數量。Runtime: 3 ms, beats 61.87%. Memory: 19.10 MB, beats 99.41%.
class Solution:
    def maxNumberOfBalloons(self, text: str) -> int:
        # 用字典記錄 balon 的字母數量
        cnt = {chr(ord('a') + i): 0 for i in range(26)}
        for c in text:
            cnt[c] += 1
        # 找 ban 字母數量最小值,lo 字母數量 / 2 最小值
        ans = 100000
        for c in "ban":
            ans = min(ans, cnt[c])
        for c in "lo":
            ans = min(ans, cnt[c] // 2)
        return ans

defaultdict,記錄所有字母的數量。Runtime: 2 ms, beats 68.66%. Memory: 19.35 MB, beats 38.08%.
class Solution:
    def maxNumberOfBalloons(self, text: str) -> int:
        # 用字典記錄 balon 的字母數量
        cnt = defaultdict(int)
        for c in text:
            cnt[c] += 1
        # 找 ban 字母數量最小值,lo 字母數量 / 2 最小值
        ans = 100000
        for c in "ban":
            ans = min(ans, cnt[c])
        for c in "lo":
            ans = min(ans, cnt[c] // 2)
        return ans

表格計數。Runtime: 3 ms, beats 61.87%. Memory: 19.36 MB, beats 38.08%.
class Solution:
    def maxNumberOfBalloons(self, text: str) -> int:
        # 用表格記錄 balon 的字母數量
        cnt = [0] * 26
        for c in text:
            cnt[ord(c) - ord('a')] += 1
        # 找 ban 字母數量最小值,lo 字母數量 / 2 最小值
        ans = 100000
        for c in "ban":
            ans = min(ans, cnt[ord(c) - ord('a')])
        for c in "lo":
            ans = min(ans, cnt[ord(c) - ord('a')] // 2)
        return ans

表格計數,找最小值時不跑迴圈。Runtime: 0 ms, beats 100.00%. Memory: 19.23 MB, beats 75.19%.
class Solution:
    def maxNumberOfBalloons(self, text: str) -> int:
        # 用表格記錄 balon 的字母數量
        cnt = [0] * 26
        for c in text:
            cnt[ord(c) - ord('a')] += 1
        # 找 ban 字母數量最小值,lo 字母數量 / 2 最小值
        return min(cnt[1], cnt[0], cnt[13], cnt[11] // 2, cnt[14] // 2)


C++ 程式碼


map,只記錄 a, b, l, o, n 的數量。Runtime: 3 ms, beats 12.33%. Memory: 8.91 MB, beats 64.87%.
class Solution {
public:
    int maxNumberOfBalloons(string text) {
        // 用字典記錄 balon 的字母數量
        map<char, int> cnt = {{'a', 0}, {'b', 0}, {'l', 0}, {'n', 0}, {'o', 0}};
        for(char c : text) {
            if (cnt.count(c) == 1) {
                cnt[c]++;
            }
        }
        // 找 ban 字母數量最小值,lo 字母數量 / 2 最小值
        int ans = 100000;
        ans = min(ans, cnt['b']);
        ans = min(ans, cnt['a']);
        ans = min(ans, cnt['n']);
        ans = min(ans, cnt['l'] / 2);
        ans = min(ans, cnt['o'] / 2);
        return ans;
    }
};

map,記錄所有字母的數量。Runtime: 2 ms, beats 19.90%. Memory: 8.86 MB, beats 84.03%.
class Solution {
public:
    int maxNumberOfBalloons(string text) {
        // 用字典記錄字母數量
        map<char, int> cnt;
        for(char c : text) {
            cnt[c]++;
        }
        // 找 ban 字母數量最小值,lo 字母數量 / 2 最小值
        int ans = 100000;
        ans = min(ans, cnt['b']);
        ans = min(ans, cnt['a']);
        ans = min(ans, cnt['n']);
        ans = min(ans, cnt['l'] / 2);
        ans = min(ans, cnt['o'] / 2);
        return ans;
    }
};

unordered_map,記錄所有字母的數量。Runtime: 0 ms, beats 100.00%. Memory: 9.06 MB, beats 39.61%.
class Solution {
public:
    int maxNumberOfBalloons(string text) {
        // 用字典記錄字母數量
        unordered_map<char, int> cnt;
        for(char c : text) {
            cnt[c]++;
        }
        // 找 ban 字母數量最小值,lo 字母數量 / 2 最小值
        int ans = 100000;
        ans = min(ans, cnt['b']);
        ans = min(ans, cnt['a']);
        ans = min(ans, cnt['n']);
        ans = min(ans, cnt['l'] / 2);
        ans = min(ans, cnt['o'] / 2);
        return ans;
    }
};

表格計數,記錄所有字母的數量。Runtime: 0 ms, beats 100.00%. Memory: 8.93 MB, beats 64.87%.
class Solution {
public:
    int maxNumberOfBalloons(string text) {
        // 用表格記錄字母數量
        vector<int> cnt (26, 0);
        for(char c : text) {
            cnt[c - 'a']++;
        }
        // 找 ban 字母數量最小值,lo 字母數量 / 2 最小值
        int ans = 100000;
        ans = min(ans, cnt[1]);  // b
        ans = min(ans, cnt[0]);  // a
        ans = min(ans, cnt[13]);  // n
        ans = min(ans, cnt[11] / 2);  // l
        ans = min(ans, cnt[14] / 2);  // o
        return ans;
    }
};

沒有留言:

張貼留言