242.有效的字母异位词 【思路】排除暴力解法,要想减少循环,就要重新设定一个数组,记录字符串中每个字母出现的次数,关键是怎么表示新数组里出现的字母从而减少对新数组的遍历,我们挨个存放字符串中出现的字母,等到查找是否出现过时,就得每查找一次遍历一遍,这时最简便的做法就是利用 ASCII 码值,按 26 个字母的顺序存放,就可以直接查找我们想要的字母的个数。第一遍循环遍历 s 字符串中的字母并记录个数,第二遍循环遍历 t 字符串字母,如果此时数组中该字母的值为 0,就证明个数不想等,返回 false。反之,数组中该字母的个数 -1,继续遍历。
varisAnagram=function(s, t){if(s.length !== t.length)returnfalse;let resArr =newArray(26).fill(0);let base ="a".charCodeAt();for(let i of s){
resArr[i.charCodeAt()- base]++;}for(let i of t){if(!resArr[i.charCodeAt()- base])returnfalse;// 如果 s 字符串中第 i 个字母的个数为 0(resArr[i] = 0),就返回 false
resArr[i.charCodeAt()- base]--;}returntrue;};
349. 两个数组的交集 【思路】利用 Set 数据结构的 filter 和 has 函数可以求交集。
varisHappy=function(n){let m =newSet();constgetSum=()=>{let sum =0;while(n){
sum +=(n %10)**2;
n = Math.floor(n /10);}return sum;}while(true){// n 重复出现证明进入循环,不会变为 1if(m.has(n))returnfalse;if(n ===1)returntrue;
m.add(n);// 记录 n 的值
n =getSum(n);}}