剑指 Offer 50. 第一个只出现一次的字符

Posted aaaaaaaWoLan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 50. 第一个只出现一次的字符相关的知识,希望对你有一定的参考价值。

剑指 Offer 50. 第一个只出现一次的字符

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

示例:

s = "abaccdeff"
返回 "b"

s = "" 
返回 " "

**思路:**开辟一个int数组arr,将内容初始化为0。以字符串的每个字符对应的ASCII码值作为数组下标,字符每出现一次就对数组的内容+1,也就是arr是用来统计每个字符出现的个数的,最后找到第一个出现一次的字符。统计完成后,不能以遍历arr的方式找到第一个出现一次的字符,因为这样查找找到的是ASCII码值最小的出现一次的字符,而不是第一个出现一次的字符,所以需要再遍历一次字符串,在arr里进行对应的判断最后返回结果。

代码:

char firstUniqChar(char* s){
    if (*s == '\\0')
    return ' ';

    int*arr = (int*)calloc(26, sizeof(int));

    char*cur = s;
    while(*cur != '\\0')//统计每个字符的个数
    {
        //因为只开辟了26个空间,小写字母的ASCII码值的范围是97-122,所以减掉'a'(ACSII码值97)的ASCII码值就刚好在0-25的范围(数组下标从0开始)
        arr[(*cur) - 'a']++;
        cur++;
    }

    while (*s != '\\0')//遍历s,在arr中找到对应第一个只出现一次的字符
    {
        if (arr[(*s) - 'a'] == 1)
        return *s;

        s++;
    }

    return ' ';
}

以上是关于剑指 Offer 50. 第一个只出现一次的字符的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode]剑指 Offer 50. 第一个只出现一次的字符

算法剑指 Offer 50. 第一个只出现一次的字符

剑指Offer--第50题 第一次只出现一次的字符

剑指 Offer 50. 第一个只出现一次的字符

剑指 Offer 50. 第一个只出现一次的字符

剑指Offer 50 - 第一个只出现一次的字符