• 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;
    }
  • 相关阅读:
    linux下实现nginx反向代理
    linux下实现nginx安装实现端口区分,域名区分
    redis整合spring
    linux下安装redis以及redis集群
    Kindeditor编辑器
    ActiveMQ
    redis(保存邮件激活码)
    AngularJS (验证码倒计时)
    linux部署项目(oracle+redis+activeMQ+elasticSearch+tomcat+JDK8)
    WebService
  • 原文地址:https://www.cnblogs.com/dracohan/p/3904575.html
Copyright © 2020-2023  润新知