「JavaScript」字符个数统计「哈希」🔢
算法思路
本题要求统计字符串中不同字符的个数,字符的范围限定在 ASCII 码的 0 到 127(包括 0 和 127)。需要注意的是:
- 字符串中的换行符不算在字符内。
- 字符范围限定为 0 到 127,其他字符不作统计。
- 多个相同的字符只计算一次。
为了高效解决这个问题,我们可以利用 哈希表(或 JavaScript 中的 Set
集合)来存储已经出现过的字符。哈希表可以帮助我们快速判断字符是否已经出现过,从而避免重复计数。
步骤:
- 初始化一个
Set
集合,用于存储出现过的字符。 - 遍历输入的字符串,对于每个字符,如果它在 ASCII 范围内(0-127),就将其加入到集合中。
- 最后,集合中的元素数量即为不同字符的个数。
Code
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
// 读取输入字符串
const str = await readline();
// 创建一个 Set 来存储不同的字符
const uniqueChars = new Set();
// 遍历字符串中的每个字符
for (let char of str) {
// 获取字符的 ASCII 码
const charCode = char.charCodeAt(0);
// 如果字符的 ASCII 码在 0 到 127 之间,才统计
if (charCode >= 0 && charCode <= 127) {
uniqueChars.add(char); // 将字符加入 Set 集合中
}
}
// 输出不同字符的数量
console.log(uniqueChars.size);
}()
复杂度分析
- 时间复杂度: O(n),其中
n
是字符串的长度。我们只需要遍历一次字符串,检查每个字符是否在 ASCII 范围内,并将其加入到集合中,整个过程的时间复杂度为 O(n)。 - 空间复杂度: O(k),其中
k
是字符串中不同字符的个数。我们使用Set
存储不同字符,最多存储 128 个字符(因为字符的 ASCII 范围是 0 到 127),所以空间复杂度为 O(k)。