• IT公司100题-17-第一个只出现一次的字符


    问题描述:
    在一个字符串中找到第一个只出现一次的字符。例如输入asdertrtdsaf,输出e。
     
    分析:
    最简单的方法是直接遍历,时间复杂度为O(n^2)。
    进一步思考:
    字符串中的字符,只有256种可能性,使用字符的为下标,扫描一遍,存储各个字符在字符串中的出现。第二次扫描字符串,查看每个字符在字符串中的出现次数,如果为1,输出即可。
     

    代码实现:

    // 17.cc
    #include
    #include
    #include
    using namespace std;
    
    char find_char(const char* str) {
        if (!str)
            return '';
        const size_t size = 256;
        size_t hash_table[size];
        memset(hash_table, 0, sizeof(size_t) * size);
    
        // 第一遍遍历,统计每个字符出现次数
        char* p = const_cast<char*>(str);
        while (*p) {
            hash_table[*p]++;
            p++;
        }
    
        // 第二遍遍历,查找出现次数为1的字符
        p = const_cast<char*>(str);
        while(*p) {
            if (1 == hash_table[*p])
                return *p;
            p++;
        }
        return '';
    }
    
    int main() {
        string s;
        cout << "please input a str:" << endl;     cin >> s;
        char c = find_char(s.c_str());
        if (c != '')
            cout << "The first char is: " << c << endl;
        else
            cout << "No char appears only once." << endl;
    
        return 0;
    }
  • 相关阅读:
    java开学第一周测试自我感想
    暑假第八周进度报告
    暑假第七周进度报告
    暑假第六周进度报告
    暑假第五周进度报告
    暑假第四周进度报告
    暑假第三周进度报告
    暑假第二周进度报告
    《大道至简》读后感
    暑假第一周进度报告
  • 原文地址:https://www.cnblogs.com/dracohan/p/3904575.html
Copyright © 2020-2023  润新知