> For the complete documentation index, see [llms.txt](https://jimmylin1991.gitbook.io/practice-of-algorithm-problems/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jimmylin1991.gitbook.io/practice-of-algorithm-problems/string/1189.-maximum-number-of-balloons.md).

# 1189. Maximum Number of Balloons

Given a string `text`, you want to use the characters of `text` to form as many instances of the word **"balloon"** as possible.

You can use each character in `text` **at most once**. Return the maximum number of instances that can be formed.

**Example 1:**

![](https://assets.leetcode.com/uploads/2019/09/05/1536_ex1_upd.JPG)

```
Input: text = "nlaebolko"
Output: 1
```

**Example 2:**

![](https://assets.leetcode.com/uploads/2019/09/05/1536_ex2_upd.JPG)

```
Input: text = "loonbalxballpoon"
Output: 2
```

**Example 3:**

```
Input: text = "leetcode"
Output: 0
```

**Constraints:**

* `1 <= text.length <= 10^4`
* `text` consists of lower case English letters only.

```cpp
int maxNumberOfBalloons(string text) { // time: O(n + m); space: O(1)
    const string target = "balloon";
    vector<int> record(26, 0), target_cnt(26, 0);
    for (char ch : target)
        ++target_cnt[ch - 'a'];
    for (char ch : text) 
        ++record[ch - 'a'];
    int res = 0, n = text.length(), m = target.length();
    while (n >= m) {
        for (int i = 0; i < 26; ++i) {
            if (record[i] < target_cnt[i]) break;
            record[i] -= target_cnt[i];
            if (i == 25) ++res;
        }
        n -= m;
    }
    return res;
}
```
