标签:count 字符 int LeetCode.1002 label 交集 Common Characters 字符串
这是悦乐书的第375次更新,第402篇原创
01 看题和准备
今天介绍的是LeetCode
算法题中Easy
级别的第236
题(顺位题号是1002
)。给定仅由小写字母组成的字符串A
,返回列表中所有字符串都有显示的字符的列表(包括重复字符)。例如,如果一个字符在所有字符串中出现3次但不是4次,则需要在最终答案中包含该字符三次。
你可以按任何顺序返回答案。例如:
输入:["bella","label","roller"]
输出:["e","l","l"]
输入:["cool","lock","cook"]
输出:["c","o"]
注意:
1 <= A.length <= 100
1 <= A[i].length <= 100
A[i][j]是一个小写字母。
02 解题
题目的意思是找A中所有字符串共有的字符,即所有字符串的字符交集。比如示例中第一个字符串数组["bella","label","roller"]
,"bella"
和"label"
的字符交集是{'a','b','e','l','l'}
,"label"
和"roller"
的字符交集是{'e','l','l'}
,而{'a','b','e','l','l'}
和{'e','l','l'}
的交集是{'e','l','l'}
,所以最后的结果是["e","l","l"]
。
思路:使用一个26
个长度的int
数组count
,初始值设为整型最大值,循环处理A
中的字符串,借助26
个长度的int
数组tem
,将每个字符串中的字符出现次数记数,然后比较count
和tem
中对应位的元素值大小(字符出现次数),取较小(求交集)的一个重新赋值给count
中的对应位,最后将count
数组中大于0的数转成字符串添加到List
中去。
public List<String> commonChars(String[] A) {
List<String> result = new ArrayList<String>();
int[] count = new int[26];
for (int i=0; i<26; i++) {
count[i] = Integer.MAX_VALUE;
}
for (String str : A) {
int[] tem = new int[26];
for (int j=0; j<str.length(); j++) {
tem[str.charAt(j)-'a']++;
}
for (int k=0; k<26; k++) {
count[k] = Math.min(count[k], tem[k]);
}
}
for (int i=0; i<26; i++) {
while (count[i]-- > 0) {
result.add((char)(i+'a')+"");
}
}
return result;
}
03 小结
算法专题目前已连续日更超过七个月,算法题文章242+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
标签:count,字符,int,LeetCode.1002,label,交集,Common,Characters,字符串 来源: https://www.cnblogs.com/xiaochuan94/p/11142210.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。