zhangdizhangdi

387. 字符串中的第一个唯一字符 🟩

题目

LeetCode 简单

题目

给定一个字符串 s ,找到 它的 第一个不重复 的字符,并返回它的索引 。如果不存在,则返回 -1 。

示例:
输入: s = “leetcode”
输出: 0

输入: s = “loveleetcode”
输出: 2

输入: s = “aabb”
输出: -1

题解

Map

  • 时间复杂度 O(N)

    N 为字符串 s 的长度;需遍历 s 两轮,使用 O(N) ;HashMap 查找操作的复杂度为 O(1) 。

  • 空间复杂度 O(1)

    由于题目指出 s 只包含小写字母,因此最多有 26 个不同字符,HashMap 存储需占用 O(26)=O(1) 的额外空间。

js
function firstUniqChar(str) {
  const sLen = str.length
  if (sLen === 0) {
    return -1
  }
  //拿到出现次数
  const sMap = new Map()
  for (let i = 0; i < sLen; i++) {
    const char = str[i]
    let len = 0
    if (sMap.has(char)) {
      len = sMap.get(char) + 1
    } else {
      len = 1
    }
    sMap.set(char, len)
  }

  console.log(sMap)

  //拿到结果
  let index = -1
  for (let i = 0; i < sLen; i++) {
    const char = str[i]
    const times = sMap.get(char)
    if (times === 1) {
      index = i
      console.log('🌹 结果:', char, i)
      break
    }
  }
  return index
}

console.log('🌰 leetcode', firstUniqChar('leetcode'))
console.log('---------')
console.log('🌰 loveleetcode', firstUniqChar('loveleetcode'))
console.log('---------')
console.log('🌰 aabb', firstUniqChar('aabb'))
执行结果
{}
🌹 结果l 0
🌰 leetcode 0
---------
{}
🌹 结果v 2
🌰 loveleetcode 2
---------
{}
🌰 aabb -1