zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    mysql备份还原
    JavaScript位移运算多个大于号的使用方法
    js with 语句的用法
    公告栏文字滚动
    Tar打包、压缩与解压缩到指定目录的方法
    域名跳转汇总文章
    linux常用命令大全
    nginx添加多站点
    linux一键安装php环境
    linux安装unzip及使用
  • 原文地址:https://www.cnblogs.com/dracohan/p/3904575.html
Copyright © 2011-2022 走看看