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

34次阅读

共计 961 个字符,预计需要花费 3 分钟才能阅读完成。

[TOC]

前端与算法 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. 反转字符串

查看更多

查看更多题解

正文完
 0