zoukankan      html  css  js  c++  java
  • 字符串中第一个只出现一次的字符

    一、题目

    在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出'b'。

    二、问题分析

    需要一个数据容器(哈希表)存放每个字符出现的次数,把一个个字符映射成一个数字。哈希表的键值(Key)是字符,值(Value)是该字符出现的次数。
    通过2次字符串扫描,第1次进行制作哈希表,第2次每扫描到一个字符,就从哈希表中得到该字符出现的次数。那么,第1个只出现1次的字符就是结果。

    C++标准模板库中的map和unordered_map实现了哈希表功能,但本题较简单,我们可以考虑实现一个简单的哈希表。
    字符(char)是一个长度为8的数据类型,总共有256中可能。于是,我们创建1个长度为256的数组,
    每个字母根据ASCII码作为数组下标对应数字的1个数字,而数组中存储的是每个字符出现的次数。
    这样,我们就创建了1个大小为256、以字符ASCII码为键值的哈希表。

    时间复杂度:O(n)

    空间复杂度:O(1)

    char FirstNotRepeatingChar(const char* pString)
    {
        if(pString == nullptr)
            return '';
    
        const int tableSize = 256;
        unsigned int hashTable[tableSize];
        for(unsigned int i = 0; i < tableSize; ++i)
            hashTable[i] = 0;
    
        const char* pHashKey = pString;
        while(*(pHashKey) != '')
            hashTable[*(pHashKey++)] ++;
    
        pHashKey = pString;
        while(*pHashKey != '')
        {
            if(hashTable[*pHashKey] == 1)
                return *pHashKey;
    
            pHashKey++;
        }
    
        return '';
    }
    
    
    作者:yusq77

    -------------------------------------------

    Wish you all the best and good health in 2021.

  • 相关阅读:
    go 学习成长之路
    多个ssh key 配置多个网址
    ubuntu 安装 gightingale
    关于open falcon 与nightingale 的一些调研
    kubeadm 命令简介
    windows kubectl 远程操作k8s
    ubuntu18.04 kuebadm 安装 k8s-1.15.9
    kubeadm 如何将节点加入集群
    centos7 kubeadm 搭建k8s
    docker 常用命令
  • 原文地址:https://www.cnblogs.com/yusq77/p/13546463.html
Copyright © 2011-2022 走看看