方法一 个人方法:
将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=unionunion=[]}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;});
};
消耗时间和内存情况: