返回介绍

solution / 1100-1199 / 1189.Maximum Number of Balloons / README_EN

发布于 2024-06-17 01:03:22 字数 5235 浏览 0 评论 0 收藏 0

1189. Maximum Number of Balloons

中文文档

Description

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:

Input: text = "nlaebolko"
Output: 1

Example 2:

Input: text = "loonbalxballpoon"
Output: 2

Example 3:

Input: text = "leetcode"
Output: 0

Constraints:

  • 1 <= text.length <= 104
  • text consists of lower case English letters only.

Solutions

Solution 1: Counting

We count the frequency of each letter in the string text , and then divide the frequency of the letters 'o' and 'l' by 2, because the word balloon contains the letters 'o' and 'l' twice.

Next, we traverse each letter in the word balon , and find the minimum frequency of each letter in the string text . This minimum frequency is the maximum number of times the word balloon can appear in the string text .

The time complexity is $O(n)$, and the space complexity is $O(C)$. Here, $n$ is the length of the string text , and $C$ is the size of the character set. In this problem, $C = 26$.

class Solution:
  def maxNumberOfBalloons(self, text: str) -> int:
    cnt = Counter(text)
    cnt['o'] >>= 1
    cnt['l'] >>= 1
    return min(cnt[c] for c in 'balon')
class Solution {
  public int maxNumberOfBalloons(String text) {
    int[] cnt = new int[26];
    for (int i = 0; i < text.length(); ++i) {
      ++cnt[text.charAt(i) - 'a'];
    }
    cnt['l' - 'a'] >>= 1;
    cnt['o' - 'a'] >>= 1;
    int ans = 1 << 30;
    for (char c : "balon".toCharArray()) {
      ans = Math.min(ans, cnt[c - 'a']);
    }
    return ans;
  }
}
class Solution {
public:
  int maxNumberOfBalloons(string text) {
    int cnt[26]{};
    for (char c : text) {
      ++cnt[c - 'a'];
    }
    cnt['o' - 'a'] >>= 1;
    cnt['l' - 'a'] >>= 1;
    int ans = 1 << 30;
    string t = "balon";
    for (char c : t) {
      ans = min(ans, cnt[c - 'a']);
    }
    return ans;
  }
};
func maxNumberOfBalloons(text string) int {
  cnt := [26]int{}
  for _, c := range text {
    cnt[c-'a']++
  }
  cnt['l'-'a'] >>= 1
  cnt['o'-'a'] >>= 1
  ans := 1 << 30
  for _, c := range "balon" {
    if x := cnt[c-'a']; ans > x {
      ans = x
    }
  }
  return ans
}
function maxNumberOfBalloons(text: string): number {
  const cnt = new Array(26).fill(0);
  for (const c of text) {
    cnt[c.charCodeAt(0) - 97]++;
  }
  return Math.min(cnt[0], cnt[1], cnt[11] >> 1, cnt[14] >> 1, cnt[13]);
}
impl Solution {
  pub fn max_number_of_balloons(text: String) -> i32 {
    let mut arr = [0; 5];
    for c in text.chars() {
      match c {
        'b' => {
          arr[0] += 1;
        }
        'a' => {
          arr[1] += 1;
        }
        'l' => {
          arr[2] += 1;
        }
        'o' => {
          arr[3] += 1;
        }
        'n' => {
          arr[4] += 1;
        }
        _ => {}
      }
    }
    arr[2] /= 2;
    arr[3] /= 2;
    let mut res = i32::MAX;
    for num in arr {
      res = res.min(num);
    }
    res
  }
}
class Solution {
  /**
   * @param String $text
   * @return Integer
   */
  function maxNumberOfBalloons($text) {
    $cnt1 = $cnt2 = $cnt3 = $cnt4 = $cnt5 = 0;
    for ($i = 0; $i < strlen($text); $i++) {
      if ($text[$i] == 'b') {
        $cnt1 += 1;
      } elseif ($text[$i] == 'a') {
        $cnt2 += 1;
      } elseif ($text[$i] == 'l') {
        $cnt3 += 1;
      } elseif ($text[$i] == 'o') {
        $cnt4 += 1;
      } elseif ($text[$i] == 'n') {
        $cnt5 += 1;
      }
    }
    $cnt3 = floor($cnt3 / 2);
    $cnt4 = floor($cnt4 / 2);
    return min($cnt1, $cnt2, $cnt3, $cnt4, $cnt5);
  }
}

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文