• 《剑指offer》第五十题(字符串中第一个只出现一次的字符)


    // 面试题50(一):字符串中第一个只出现一次的字符
    // 题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出
    // 'b'。
    
    #include <iostream>
    #include <string>
    //使用一个长度为常量的哈希表,两次遍历,时间复杂度O(n),空间复杂度O(1)
    char FirstNotRepeatingChar(const char* pString)
    {
        if (pString == nullptr)
            return '';
    
        const int tableSize = 256;
        unsigned int hashTable[tableSize];//建立一个简单的哈希表,键值为ASCII码的int值,值为其个数
        for (unsigned int i = 0; i < tableSize; ++i)
            hashTable[i] = 0;
    
        const char* pHashKey = pString;
        while (*(pHashKey) != '')//第一次遍历,统计pString字符串中每个字符的个数
            hashTable[*(pHashKey++)] ++;
    
        pHashKey = pString;
        while (*pHashKey != '')//第二次遍历,检查哈希表中第一个值为1的键值
        {
            if (hashTable[*pHashKey] == 1)
                return *pHashKey;
    
            pHashKey++;
        }
    
        return '';
    }
    
    // ====================测试代码====================
    void Test(const char* pString, char expected)
    {
        if (FirstNotRepeatingChar(pString) == expected)
            printf("Test passed.
    ");
        else
            printf("Test failed.
    ");
    }
    
    int main()
    {
        // 常规输入测试,存在只出现一次的字符
        Test("google", 'l');
    
        // 常规输入测试,不存在只出现一次的字符
        Test("aabccdbd", '');
    
        // 常规输入测试,所有字符都只出现一次
        Test("abcdefg", 'a');
    
        // 鲁棒性测试,输入nullptr
        Test(nullptr, '');
        system("pause");
        return 0;
    }

  • 相关阅读:
    如何了解网络链路的性能,吞吐量测试
    Struts+Spring+HibernateSSH整合实例
    在百度贴吧打出被和谐的字和特殊字符:比如繁体字
    SVN 小记
    SVN 小记
    SVN needslock 设置强制只读属性
    在百度贴吧打出被和谐的字和特殊字符:比如繁体字
    TortoiseSVN与Subversion 1.5
    .NET中非对称加密RSA算法的密钥保存
    SVN needslock 设置强制只读属性
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10526941.html
Copyright © 2020-2023  润新知