zoukankan      html  css  js  c++  java
  • 字符串中的第一个唯一字符

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

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

    示例

    s = "leetcode"
    返回 0
    
    s = "loveleetcode"
    返回 2
    

    题解

    /**
     * @param {string} s
     * @return {number}
     */
    var firstUniqChar = function(s) {
        const hashTable = Object.create(null);
        Array.prototype.forEach.call(s, v => {
            if(hashTable[v] === void 0) hashTable[v] = 1;
            else ++hashTable[v];
        })
        const n = s.length;
        for(let i=0;i<n;++i){
            if(hashTable[s[i]] === 1) return i;
        }
        return -1;
    };
    

    思路

    我们可以对字符串进行两次遍历,在第一次遍历时,我们使用哈希映射统计出字符串中每个字符出现的次数,在第二次遍历时,我们只要遍历到了一个只出现一次的字符,那么就返回它的索引,否则在遍历结束后返回-1即可。当然此处是使用的哈希表进行存储,如果使用两个数组进行存储的话可能会快一些,哈希表要计算HashCode,然后再按照HashCode取索引,当字符串比较长的时候可能还会引起Hash表底层数据的扩容从而产生ReHash,同时Hash碰撞也是要考虑的成本。首先建立一个哈希表,直接构建没有原型的对象即可,之后使用数组的原型方法forEach循环这个字符串,构建哈希表,在键不存在时将此键的值设置为1,否则就自增值,之后获取字符串长度,建立循环,如果这个键在哈希表中的值为1,则返回该值的索引,如果没找到则返回-1即可。

    每日一题

    https://Github.com/WindrunnerMax/EveryDay
    

    参考

    https://leetcode-cn.com/problems/first-unique-character-in-a-string/
    
  • 相关阅读:
    Eclipse consle 输出语句中,误输中文,假死问题
    Eclipse 快捷键 (最实用)
    mysql 4种启动方式
    mysql索引的类型和优缺点
    Windows上 使用Composer安装tp5
    php 更新配置文件
    可视化工具连接Linux上的redis
    HttpClient 4 教程 第3章 HTTP状态管理
    HttpClient 4 教程 第2章 连接管理
    HttpClient 4 教程 第1章 基础
  • 原文地址:https://www.cnblogs.com/WindrunnerMax/p/14178794.html
Copyright © 2011-2022 走看看