日拱一卒——Leetcode 1002.查找常用字符

大家好呀,今天为大家带来的LeetCode的题目是 leetcode 1002.查找常用字符,一道LeetCode上的简单题目。题目属于简单题,只需要在编写的过程中注意一些细节就没什么问题

题目

image.png

分析

这道题目的核心就是计数,我们只需要维护一个数组,该数组记录这目前为止各个字母出现的最少次数,然后不停的往后遍历整个字符串数组,每遍历一个就更新这个数组,直到最后遍历完,再将其输出即可。

解法一:计数

通过上面的分析,我们只需要依次遍历这个字符串数组中的每个字符串,然后针对每个字符串去统计每个字母出现的次数,遍历完后,再去更新目前各个字母在字符串中出现的最小次数,然后组装输出结果输出皆可。

代码实现

解法一:递归算法

 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和计算机基础知识,保证让你看完有所收获,不信你打我
  • 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。

image

猜你喜欢

转载自blog.csdn.net/issunmingzhi/article/details/109072405