返回

JS 算法——寻找字符串中的第一个只出现一次的字符

前端

算法解析

给定一个字符串 s,我们的目标是找出字符串中第一个只出现一次的字符。算法的步骤如下:

  1. 初始化一个哈希表 hash

哈希表用于存储字符串中出现过的字符及其出现的次数。键是字符,值是出现次数。

  1. 遍历字符串 s 中的每个字符 c

  2. 如果 hash 中没有字符 c,则将 c 作为键添加到 hash 中,并将其值设置为 1。

这意味着这是我们第一次遇到字符 c

  1. 如果 hash 中已经有字符 c,则将 hash[c] 的值加 1。

这意味着我们又遇到了一次字符 c

  1. 遍历哈希表 hash,找到第一个值为 1 的键。

这就是字符串中第一个只出现一次的字符。

  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 算法,用于在一个字符串中查找第一个只出现一次的字符。通过循序渐进的讲解和示例,我们深入浅出地探讨了该算法的工作原理,并帮助读者掌握其应用技巧。读者可以将该算法扩展应用于查找数组中第一个只出现一次的元素。