码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-11 14:52:52      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   strong   ar   问题   div   

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

代码实现:

// 17.cc
#include
#include
#include
using namespace std;

char find_char(const char* str) {
    if (!str)
        return \0;
    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 \0;
}

int main() {
    string s;
    cout << "please input a str:" << endl;     cin >> s;
    char c = find_char(s.c_str());
    if (c != \0)
        cout << "The first char is: " << c << endl;
    else
        cout << "No char appears only once." << endl;

    return 0;
}

 

 

IT公司100题-17-第一个只出现一次的字符,布布扣,bubuko.com

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

标签:style   blog   color   使用   strong   ar   问题   div   

原文地址:http://www.cnblogs.com/dracohan/p/3904575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!