返回
JS 算法——寻找字符串中的第一个只出现一次的字符
前端
2023-09-04 08:47:44
算法解析
给定一个字符串 s
,我们的目标是找出字符串中第一个只出现一次的字符。算法的步骤如下:
- 初始化一个哈希表
hash
。
哈希表用于存储字符串中出现过的字符及其出现的次数。键是字符,值是出现次数。
-
遍历字符串
s
中的每个字符c
。 -
如果
hash
中没有字符c
,则将c
作为键添加到hash
中,并将其值设置为 1。
这意味着这是我们第一次遇到字符 c
。
- 如果
hash
中已经有字符c
,则将hash[c]
的值加 1。
这意味着我们又遇到了一次字符 c
。
- 遍历哈希表
hash
,找到第一个值为 1 的键。
这就是字符串中第一个只出现一次的字符。
- 如果没有找到值为 1 的键,则返回一个单空格。
这意味着字符串中没有只出现一次的字符。
代码示例
function firstUniqueChar(s) {
// 创建哈希表
const hash = {};
// 遍历字符串中的每个字符
for (let i = 0; i < s.length; i++) {
const char = s[i];
// 如果哈希表中没有该字符,则添加它
if (!hash[char]) {
hash[char] = 1;
}
// 如果哈希表中已有该字符,则将出现的次数加 1
else {
hash[char]++;
}
}
// 遍历哈希表,找到第一个值为 1 的键
for (const char in hash) {
if (hash[char] === 1) {
return char;
}
}
// 如果没有找到值为 1 的键,则返回一个单空格
return ' ';
}
复杂度分析
该算法的时间复杂度为 O(n)
,其中 n
是字符串 s
的长度。这是因为我们遍历了字符串 s
一次,并在哈希表中对每个字符进行了恒定的时间查找和插入操作。
该算法的空间复杂度也为 O(n)
,因为我们使用了哈希表来存储字符串 s
中出现过的字符及其出现的次数。
扩展应用
该算法可以扩展应用于查找数组中第一个只出现一次的元素。只需将字符串 s
替换为数组 arr
,并使用 hash[arr[i]]
代替 hash[char]
即可。
总结
本篇文章介绍了一种 JavaScript 算法,用于在一个字符串中查找第一个只出现一次的字符。通过循序渐进的讲解和示例,我们深入浅出地探讨了该算法的工作原理,并帮助读者掌握其应用技巧。读者可以将该算法扩展应用于查找数组中第一个只出现一次的元素。