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

查看更多

查看更多题解

前端与算法 leetcode 387. 字符串中的第一个唯一字符的更多相关文章

  1. Java实现 LeetCode 387 字符串中的第一个唯一字符

    387. 字符串中的第一个唯一字符 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = "leetcode" 返回 0. s = ...

  2. LeetCode 387: 字符串中的第一个唯一字符 First Unique Character in a String

    题目: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. Given a string, find the first non-repeating charact ...

  3. LeetCode初级算法之字符串:387 字符串中的第一个唯一字符

    字符串中的第一个唯一字符 题目地址:https://leetcode-cn.com/problems/first-unique-character-in-a-string/ 给定一个字符串,找到它的第 ...

  4. 【LeetCode】字符串中的第一个唯一字符

    [问题]给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. s = "leetcode" 返回 . s = "loveleetcode ...

  5. 力扣(LeetCode)字符串中的第一个唯一字符 个人题解

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = "leetcode" 返回 0. s = "loveleetcod ...

  6. Leecode刷题之旅-C语言/python-387 字符串中的第一个唯一字符

    /* * @lc app=leetcode.cn id=387 lang=c * * [387] 字符串中的第一个唯一字符 * * https://leetcode-cn.com/problems/f ...

  7. LeetCode初级算法--字符串02:字符串中的第一个唯一字符

    LeetCode初级算法--字符串02:字符串中的第一个唯一字符 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog. ...

  8. leecode刷题(13) -- 字符串中的第一个唯一字符

    leecode刷题(13) -- 字符串中的第一个唯一字符 字符串中的第一个唯一字符 描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = & ...

  9. LeetCode 387. First Unique Character in a String (字符串中的第一个唯一字符)

    题目标签:String, HashMap 题目给了我们一个 string,让我们找出 第一个 唯一的 char. 设立一个 hashmap,把 char 当作 key,char 的index 当作va ...

随机推荐

  1. vs 本地调试(IIS)

    参考地址:https://blog.csdn.net/qq_18979049/article/details/78613878 一.情景描述 1.有的项目需要部署才能进行真实情况模拟(例如微信公众号) ...

  2. Java生鲜电商平台-商品无限极目录的设计与架构

    Java生鲜电商平台-商品无限极目录的设计与架构 说明:任何一个商品都应该是先属于某一个目录,然后在目录中添加商品,目录理论上最多支持三级,因为级别太多,不容易管理.但是设计中需要设计无限制的级别. ...

  3. Vue 动态修改data 值 并触发视图更新

    Vue 动态修改data 值 并触发视图更新 this.$set(obj, key, '') // Vue 动态修改或者添加data key 并触发视图更新

  4. Redis命令geoXXX

    1. Redis命令geoXXX 1.1. 介绍 自Redis 3.2开始,Redis基于geohash和有序集合提供了地理位置相关功能. Redis Geo模块包含了以下6个命令: GEOADD: ...

  5. strace命令 系统调用

    简介 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核 ...

  6. bootstrap基础样式学习(一)

    1.按钮btn .btn 按钮基础的样式 .btn-default 白底黑子的按钮 .btn-danger/warning/success/info/primary .btn-lg/sm/xs 按钮大 ...

  7. Django restframework 序列化之 ModelSerializer 小记

    首先介绍一下相关概念 序列化器(Serializer) 1. 自定义型:  继承rest_framework.serializers.Serializer 2. 模型类型:  继承rest_frame ...

  8. 2-1Numpy概述

    In [1]: import numpy as np In [2]: array=[1,2,3,4,5] array+1#没定义成numpy.ndarray类型是不能直接操作的   --------- ...

  9. FFMPEG+SDL实现视频播放器

    一. 前言 基于学习ffmpeg和sdl,写一个视频播放器是个不错的练手项目. 视频播放器的原理很多人的博客都有讲过,这里出于自己总结的目的,还是会做一些概况. 二. 视频播放器基本原理 2.1 解封 ...

  10. day8_7.8 文件操作

    一.文件模式 1.在文件的操作中,也有很多补充 的模式可使用 1.r+,可读可写模式,在此模式中,操作权限时可读可写,这里的写与write模式不一样的是,不再清空文件内容,写的内容添加到文件的后面,而 ...