前端与算法 leetcode 387. 字符串中的第一个唯一字符

文章目录

  • 前端与算法 leetcode 387. 字符串中的第一个唯一字符
    • 题目描述
    • 概要
    • 提示
    • 解析
      • 解法一:双循环
      • 解法二:Set法单循环
    • 算法
    • 传入测试用例的运行结果
    • 执行结果
      • GitHub仓库
      • 查看更多

前端与算法 leetcode 387. 字符串中的第一个唯一字符


题目描述

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

案例:

s = "leetcode"
返回 0.

s = "loveleetcode",
返回 2.
 

注意事项:您可以假定该字符串只包含小写字母。

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

概要

提示

双for循环遍历一下

解析

解法一:双循环

最简单的解法就是双for循环遍历一下所有字符的出现次数存在Map里,然根据map中出现次数仅为一次的字符返回其下标即可

解法二:Set法单循环

构建一个Set对象,使用s.include(s[i],i+1)判断i+1后面是否出现改字符和set.has(s[i])判断之前是否有这个字符即可

算法

/**
 * @param {string} s
 * @return {number}
 */
var firstUniqChar = function (s) {
  // 解法二
  if (s === '' || s.length < 1) {return -1;}
  let set = new Set();
  for (let i = 0 ;i < s.length;i++) {
    // includes第二个参数可选。从当前字符串的哪个索引位置开始搜寻子字符串,默认值为0。
    if (!s.includes(s[i], i + 1) && !set.has(s[i])) {
      return i;
    } else {
      set.add(s[i]);
    }
  }
  return -1;
  // 解法一
  // if (s === '' || s.length < 1) {return -1;}
  // let map = {};
  // for (let i = 0 ;i < s.length;i++) {
  //   map[s[i]] === undefined ? map[s[i]] = 0 : map[s[i]]++;
  // }
  // for (const key in map) {
  //   if (map[key] === 0) {
  //     return s.indexOf(key);
  //   }
  // }
  // return -1;
};

传入测试用例的运行结果

input:asdfagsdfasdf
output:5

执行结果

执行用时 :92 ms, 在所有 javascript 提交中击败了93.73%的用户
内存消耗 :37.9 MB, 在所有 javascript 提交中击败了48.47%的用户

GitHub仓库

344. 反转字符串

查看更多

查看更多题解

你可能感兴趣的:(前端)