这是小川的第416次更新,第449篇原创

看题和准备

今天介绍的是LeetCode算法题中Easy级别的第267题(顺位题号是1189)。给定一个字符串文本,使用文本字符来构成单词"balloon"的尽可能多的实例。每个字符最多可以在文本中使用一次。返回可以形成的最大实例数。

例如:

输入:text = "nlaebolko"

输出:1

输入:text = "loonbalxballpoon"

输出:2

输入:text = "leetcode"

输出:0

约束

  • 1 <= text.length <= 10^4
  • 文本字符串仅包含小写英文字母。

第一种解法

题目的意思是要在一个给定的字符串中,找到能够组成字符串"balloon"的最大字符对数,本质上和木桶装水的容量由短板决定类似。

直接遍历text字符串中的字符,对字母ablno的出现次数计数,因为l和o是需要两个,在计数完后,需要对lo的次数除2,然后比较5个字母出现次数的最小值,因为只有出现次数最小的那个字母才能最终决定组成多少个"balloon"

public int maxNumberOfBalloons(String text) {
if (text == "" || text.length() < 7) {
return 0;
}
int A = 0, B = 0, L = 0, O = 0, N = 0;
int len = text.length();
for (int i=0; i<len; i++) {
if (text.charAt(i) == 'a') {
A++;
} else if (text.charAt(i) == 'b') {
B++;
} else if (text.charAt(i) == 'l') {
L++;
} else if (text.charAt(i) == 'n') {
N++;
} else if (text.charAt(i) == 'o') {
O++;
}
}
L /= 2;
O /= 2;
int min = Math.min(A, B);
min = Math.min(min, N);
if (min == 0) {
return 0;
}
if (L !=0 && O != 0) {
min = Math.min(min, L);
min = Math.min(min, O);
return min;
}
return 0;
}

第二种解法

针对第一种解法里,在循环中判断字母的方式,可以换成使用一个长度为26的int数组,根据26个英文字母的顺序,直接从数组中取值即可,最后返回5个数中的最小值。

public int maxNumberOfBalloons2(String text) {
if (text == "" || text.length() < 7) {
return 0;
}
int A = 0, B = 0, L = 0, O = 0, N = 0;
int len = text.length();
int[] arr = new int[26];
for (int i=0; i<len; i++) {
arr[text.charAt(i)-'a']++;
}
A = arr[0];
B = arr[1];
L = arr[11]/2;
N = arr[13];
O = arr[14]/2;
int min = Math.min(A, B);
min = Math.min(min, N);
min = Math.min(min, L);
min = Math.min(min, O);
return min;
}

第三种解法

针对第二种解法,我们可以将5个局部变量也省略掉,毕竟只是比较最小值,直接去数组里取就行。

public int maxNumberOfBalloons3(String text) {
if (text == "" || text.length() < 7) {
return 0;
}
int len = text.length();
int[] arr = new int[26];
for (int i=0; i<len; i++) {
arr[text.charAt(i)-'a']++;
}
int min = Math.min(arr[0], arr[1]); //a b
min = Math.min(min, arr[13]); // n
min = Math.min(min, arr[11]/2); // l
min = Math.min(min, arr[14]/2); // o
return min;
}

小结

算法专题目前已更新LeetCode算法题文章273+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、在看就是对我最大的回报和支持!

最新文章

  1. lob结构
  2. 关于学习angularJS 的 心里路程(二)
  3. NVelocity用法(转)
  4. IOS UIView 02- 深入理解 Scroll Views
  5. Fibonacci
  6. [Aaronyang] 写给自己的WPF4.5 笔记[2依赖属性]
  7. Core Java Volume I — 4.4. Static Fields and Methods
  8. COM ,Threading Models,apartments,RPC
  9. JSBinding + SharpKit / 常见问题
  10. PHP基础 CGI,FastCGI,PHP-CGI与PHP-FPM
  11. 第三次作业随笔(new)包含了补作业
  12. 轻量级jQuery工具提示插件tooltipsy使用方法
  13. hdu 2824The Euler function
  14. 轻松理解JavaScript之AJAX
  15. Python 基础 二
  16. MSIL实用指南-加载null、string、long、float、double等值
  17. Android下拉列表控件spinner-andoid学习之旅(十一)
  18. [蓝桥杯]PREV-13.历届试题_网络寻路
  19. 翻译:SET子句(已提交到MariaDB官方手册)
  20. fk的使用细节

热门文章

  1. python_模块1
  2. 【组合数学】AGC036C - GP 2
  3. python--openCV--图像处理
  4. HDU 6068 - Classic Quotation | 2017 Multi-University Training Contest 4
  5. springboot 集成swagger2.x 后静态资源报404
  6. java接口的多继承
  7. 封装Vue组件的一些技巧
  8. Solution: The process cannot access the file [filename] because it is being used by another process.
  9. LA 6972 Domination
  10. vim 代码块排版