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/
    
  • 相关阅读:
    js中的原生Ajax和JQuery中的Ajax
    this的用法
    static的特性
    时政20180807
    java compiler没有1.8怎么办
    Description Resource Path Location Type Java compiler level does not match the version of the installed Java project facet Unknown Faceted Project Problem (Java Version Mismatch)
    分词器
    [数算]有一个工程甲、乙、丙单独做,分别要48天、72天、96天完成
    一点感想
    解析Excel文件 Apache POI框架使用
  • 原文地址:https://www.cnblogs.com/WindrunnerMax/p/14178794.html
Copyright © 2011-2022 走看看