1 回答
![?](http://img1.sycdn.imooc.com/545850200001359c02200220-100-100.jpg)
TA贡献1943条经验 获得超7个赞
从复杂度分析的角度来看,在ex 1中,由于数组大小没有增加,复杂度为O(1)。因为您将表初始化为固定大小 26(看起来您正在计算字符串中的字符数?)。
请参阅下面的示例,该示例跟踪字符串中字母的计数(为清楚起见,仅使用小写字母)。在这种情况下,即使字符串改变其长度,跟踪字母数的数组的长度也不会改变。
function getCharacterCount(s){
const array = new Int8Array(26);
for (let i = 0; i < s.length; i++) {
array[s.charCodeAt(i) - 97]++;
}
return array;
}
现在让我们将实现改为 map 。这里地图的大小随着字符串中遇到新字符而增加。所以
从理论上讲,空间复杂度是 O(n)。
但实际上,我们从长度为 0(0 个键)的 map 开始,它不会超过 26。如果字符串不包含所有字符,则占用的空间将比之前实现中的数组小得多。
function getCharacterCountMap(s){
const map = {};
for (let i = 0; i < s.length; i++) {
const charCode = s.charCodeAt(i) - 97;
if(map[charCode]){
map[charCode] = map[charCode] + 1
}else{
map[charCode] = 0;
}
}
return map;
}
function getCharacterCount(s){
const array = new Int8Array(26);
for (let i = 0; i < s.length; i++) {
array[s.charCodeAt(i) - 97]++;
}
return array;
}
function getCharacterCountMap(s){
const map = {};
for (let i = 0; i < s.length; i++) {
const charCode = s.charCodeAt(i) - 97;
if(map[charCode]){
map[charCode] = map[charCode] + 1
}else{
map[charCode] = 1;
}
}
return map;
}
console.log(getCharacterCount("abcdefabcedef"));
console.log(getCharacterCountMap("abcdefabcdef"));
添加回答
举报