每日一题——LeetCode1002

2024-01-01 15:29:23

方法一 个人方法:

将words里的字符串的每个字符出现的次数都转为键值对的形式:

循环求两两键值对数组的交集:

最后的交集就是重复出现的字符和次数,把键值对转回字符数组形式即可

思路对了,但是太复杂了,时间效率很低

var commonChars = function(words) {
    var arr=[],newWords=[],union=[]
    for(var item of words){
        for(var char of item){
            if(!arr[char]){
                arr[char]=1
            }else{
                arr[char]++
            }
        }
        newWords.push(arr)
        arr=[]
    }
    arr=newWords[0]
    for(var i=1;i<newWords.length;i++){
        for( char of words[i]){
            if(arr[char]){
                union[char]=arr[char]<=newWords[i][char]?arr[char]:newWords[i][char]
            }
        }
        arr=union
        union=[]
    }
    
   for(char in arr){
       for(i=0;i<arr[char];i++){
           union.push(char)
       }
   }
   return union
};

消耗时间和内存情况:

?方法二? 参考大佬的:

直接使用第一项或最后一项作为对比模板,查询相同字母
需要注意,找到一个相同字母后,需要去除这个字母,才能进行下一个字母的对比

var commonChars = function(words) {
    let father = words.pop().split("");
    return father.filter(e=>{
      let flag = words.every(item=>{
        return item.indexOf(e) > -1;
      });
      if(flag) {
        words = words.map(d=>{
          return d.replace(e,'');
        })
      }
      return flag;
    });
};

消耗时间和内存情况:

文章来源:https://blog.csdn.net/weixin_52878347/article/details/135324525
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。