【leetcode40—–查找共用字符】

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。【leetcode40—–查找共用字符】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

查找共用字符

给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。

示例 1:

输入:words = [“bella”,”label”,”roller”]
输出:[“e”,”l”,”l”]
示例 2:

输入:words = [“cool”,”lock”,”cook”]
输出:[“c”,”o”]

提示:

1 <= words.length <= 100
1 <= words[i].length <= 100
words[i] 由小写英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-common-characters
 

题解一:

笔者的题解是:以数组中第一个字符串为标准,对于第一个字符串中的每个字符,分别判断其余字符串中是否包含此字符,但是如果有一个字符串中该字符只出现一次,而其他字符串中该字符都出现两次,结果中该字符会出现两次,结果就会出错。所以,在判断字符串中是否包含字符时,若包含,则将该字符从该字符串中移除,而且若该字符串中包含多个该字符,每次只移除一个,所以就使用到了字符串的split方法,先将该字符串根据该字符分隔,然后再合并,就可以移除该字符。具体代码如下:

class Solution {
    public List<String> commonChars(String[] words) {
        List<String> list=new ArrayList<String>();
        for(int i=0;i<words[0].length();i++){
            String s="";
            s+=words[0].charAt(i);
            boolean flag=true;
            for(int j=1;j<words.length;j++){
                if(!words[j].contains(s)){
                    flag=false;
                    break;
                }else{
                    String[] str=words[j].split(s,2);//将字符串只按照该字符分割一次
                    words[j]=str[0]+str[1];
                }
            }
            if(flag){
                list.add(s);
            }
        }
        return list;
    }
}

题解二:

官解使用了两个数组,因为字符串由小写英文字母组成,所以每个数组的长度是26,数组freq用来存储每个字符串中各个字母的出现次数,数组minfreq用来存储在所有字符串中各个字母出现的最小次数,每遍历一个字符串,两个数组都进行一次更新。最后,按照minfreq数组中每个字母出现的次数,将对应字母存入集合中返回。具体代码如下:

class Solution {
    public List<String> commonChars(String[] words) {
        int[] freq=new int[26];
        int[] minfreq=new int[26];
        List<String> list=new ArrayList<String>();
        Arrays.fill(minfreq,Integer.MAX_VALUE);
        for(String s:words){
            for(int i=0;i<s.length();i++){
                freq[s.charAt(i)-'a']++;
            }
            for(int i=0;i<26;i++){
                minfreq[i]=Math.min(minfreq[i],freq[i]);
            }
            Arrays.fill(freq,0);
        }
        for(int i=0;i<26;i++){
            while(minfreq[i]>0){
                String s="";
                char c=(char)('a'+i);
                s+=c;
                list.add(s);
                minfreq[i]--;
            }
        }
        return list;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153905.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!