LeetCode Algorithm Tips

使用一个字符的ASCII码值来统计字母在字符串中出现的次数

 
  1. ASCII码值:每个字符都有一个对应的ASCII码值,例如字母a的ASCII码值是97,字母b的ASCII码值是98,以此类推。
  1. 计算差值:为了得到一个字符对应的索引,我们可以用该字符的ASCII码值减去字母a的ASCII码值。这样,字母a会得到索引0,字母b会得到索引1,字母c会得到索引2,以此类推。
 

创建一个长度为26的数组来表示英文字母的频率,初始化每个位置为0。因为英文小写字母共有26个,所以数组长度为26。

// Step 1: 统计频率
    let freq = new Array(26).fill(0);
 

使用一个循环遍历字符串s中的每个字符,计算字符的ASCII码值与字母a的ASCII码值之差,该差值就是该字符在freq数组中的索引位置,然后将对应的频率加1。

for (let char of s) {
        freq[char.charCodeAt(0) - 'a'.charCodeAt(0)]++;
    }
 

使用filter函数过滤掉那些频率为0的字符,因为这些字符在字符串s中没有出现。然后使用sort函数对频率数组进行降序排序。

freq = freq.filter(f => f !== 0).sort((a, b) => b - a);
 

slice()的技巧

 

slice() 方法的主要用途是从已有的数组中返回选定的元素。它会返回一个新的数组对象,这个新数组对象将包含原始数组中被选定的元素的浅拷贝。

slice() 可以接收两个参数:开始和结束位置,来指定要提取的元素范围。如果不提供任何参数,它将返回原始数组的一个完整的浅拷贝。

 

一些使用 slice() 的例子:

  • 基础用法:提取数组的一部分:
javascriptCopy code
let numbers = [1, 2, 3, 4, 5];
let subset = numbers.slice(1, 4); // [2, 3, 4]
 
  • tip:使用 slice() 进行数组的浅拷贝:
javascriptCopy code
let original = [1, 2, 3];
let copied = original.slice(); // [1, 2, 3]
 
  • tip:用于将类数组对象/集合转换为新数组:
javascriptCopy code
let nodeList = document.querySelectorAll('div');
let arrayOfDivs = Array.prototype.slice.call(nodeList);