大家好呀,今天为大家带来的LeetCode的题目是 leetcode 1002.查找常用字符,一道LeetCode上的简单题目。题目属于简单题,只需要在编写的过程中注意一些细节就没什么问题
题目
分析
这道题目的核心就是计数,我们只需要维护一个数组,该数组记录这目前为止各个字母出现的最少次数,然后不停的往后遍历整个字符串数组,每遍历一个就更新这个数组,直到最后遍历完,再将其输出即可。
解法一:计数
通过上面的分析,我们只需要依次遍历这个字符串数组中的每个字符串,然后针对每个字符串去统计每个字母出现的次数,遍历完后,再去更新目前各个字母在字符串中出现的最小次数,然后组装输出结果输出皆可。
代码实现
解法一:递归算法
public List<String> commonChars(String[] A) {
// 题目中规定了A数组一定有值,所以我们无需判断没有值的情况,直接进入即可
// 因为题目上就说就26个小写字母,所以我们只需要创建一个大小为26的数组,按顺序记录下每个字符出现的最小次数即可
int [] ans = new int[26];
// 然后为这个需要和每次遍历的结果比大小,取最小值,所以我们就需要需要把刚创建的数组附上默认值
Arrays.fill(ans,Integer.MAX_VALUE);
// 遍历数组
for(String s : A){
// 由于ans数组是维护当前最小值,所以在每次遍历的时候,我们需要创建一个新的数组来保存当前的
int[] temp = new int[26];
int len = s.length();
// 将第i个字符串进行拆解赋值
for(int i=0;i<len;i++){
char ch =s.charAt(i);
temp[ch-'a']++;
}
// 进行比较更新最小出现次数
for(int i=0;i<26;i++){
ans[i]=Math.min(ans[i],temp[i]);
}
}
// 遍历完进行组装返回值
List listans = new ArrayList<String>();
for (int i =0;i<26;i++){
for(int j=0;j<ans[i];j++){
listans.add(String.valueOf((char)(i+'a')));
}
}
return listans;
}
最后
- 如果觉得看完有收获,希望能给我点个赞,这将会是我更新的最大动力,感谢各位的支持
- 欢迎各位关注我的公众号【java冢狐】,专注于java和计算机基础知识,保证让你看完有所收获,不信你打我
- 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。