资讯专栏INFORMATION COLUMN

1002-查找常用字符

winterdawn / 2978人阅读

摘要:前言的查找常用字符给定仅有小写字母组成的字符串数组,返回列表中的每个字符串中都显示的全部字符包括重复字符组成的列表。

前言

Weekly Contest 126的 查找常用字符:

给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。

你可以按任意顺序返回答案。

示例1:

输入:["bella","label","roller"]
输出:["e","l","l"]

示例2:

输入:["cool","lock","cook"]
输出:["c","o"]

提示:

1 <= A.length <= 100

1 <= A[i].length <= 100

A[i][j] 是小写字母

解题思路

本题需要注意的是要输出所有单词中重复的字符,如果重复字符有多个就输出对应个数。我的解题思路如下:

以单词中的字符为key,字符在单词中的出现次数为valueMap将每个单词的字符及出现频次记录下来。

找出每个Mapkey相同的元素,并以出现次数value的最小值为新的value组成重复单词出现频次的Map

遍历步骤2中的Map,根据value可以得知每个单词的出现次数,将Map转化为一个List

实现代码
    /**
     * 1002. 查找常用字符
     * @param A
     * @return
     */
    public List commonChars(String[] A) {
        // 记录重复字符出现次数的map
        // key为单词中的字符,value为单词中该字符的出现次数
        Map searchMap=new HashMap<>();
        for(int i=0;i map=new HashMap<>();
            for(String word:words){
                if(map.containsKey(word)){
                    map.put(word,map.get(word)+1);
                }else{
                    map.put(word,1);
                }
            }
            if(i==0){//第一次遍历时把所有字符和其对应的出现次数记录下来
                searchMap.putAll(map);
            }else{
                Iterator> it=searchMap.entrySet().iterator();
                //新的重复字符出现次数的map
                Map newSearchMap=new HashMap<>();
                while (it.hasNext()){
                    Map.Entry entry=it.next();
                    String key=entry.getKey();
                    Integer value=entry.getValue();
                    if(map.containsKey(key)){// 在原map中存在相同字符,则将其记录到新的map中,需要注意,以较少出现次数的准
                        Integer otherValue=map.get(key);
                        newSearchMap.put(key,Math.min(value,otherValue));
                    }
                }
                searchMap=newSearchMap;
            }
        }
        List result=new ArrayList<>();
        searchMap.forEach((k,v)->{//将map转化为结果
            for(int i=1;i<=v;i++){//根据出现次数value来给result添加对应个数的key
                result.add(k);
            }
        });
        return result;
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73528.html

相关文章

  • TP5学习记录(Model篇)

    摘要:数据库操作数据库连接在设置数据库连接参数或者利用方法设置数据库连接数据库初始化,并取得数据库类实例数据库配置信息数组,可以在该方法里面进行配置数据库查找直接操作语句描述查询语句,然后类型语句字符串语句中绑定的字符串常用查询语句返回所有记录, ThinkPHP 数据库操作 数据库连接 #在config/database.php设置数据库连接参数或者利用Db::connect()方法设置数...

    bingo 评论0 收藏0
  • 8. Q语言学习之路—表

    摘要:其中代表了列的类型,表示了是否存在任何外键。事实上,语言会自动地识别满足表形式的列字典,在没有任何请求询问下,将其转换为表形式。结果显示的结果永远是一个表。被用来合并两个具有相同列的键表。属性表明对所有出现的值,相同的值都是互相邻近的。 0. 概述 表(Tables)和列表、字典一样,都是q语言中的第一类对象(First-class entity) Q表是*列导向的* Q表是从字典构...

    syoya 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<