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.

  • 相关阅读:
    如何在Nginx下配置PHP程序环境
    PHPStorm2016如何安装主题
    Yii2初级入门教程
    递归递归!!
    PHP值传递和引用传递的区别
    网站移植到linux上后常犯的错误
    PHP之function_handling 函数
    PHP如何使用免费在线客服插件
    PHP快速入门 常用配置
    PHP快速入门 如何操作MySQL
  • 原文地址:https://www.cnblogs.com/yusq77/p/13546463.html
Copyright © 2011-2022 走看看