35-求字符串中第一个只出现一次的字符

本文介绍了一种使用哈希表解决寻找字符串中首次出现的唯一字符的问题。通过两次遍历字符串,首次构建哈希表记录字符出现次数,再次遍历查找首个出现次数为1的字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述

在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'

二、解题思路

构建一个哈希表,其中键用来存这个字符信息,值用来记录该值出现的次数
需要遍历两次这个字符串
第一次遍历:构建哈希表  ---O(n)时间复杂度
第二次遍历:哈希表的查找---O(1)时间复杂度

三、解题算法

/************************************************
author:tmw
date:2018-8-4
*************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**哈希表
因为char型是长度为
**/
char findApearOnceFirstly(char* str)
{
    if( str == NULL ) return '\0';
    if( strlen(str) == 1 ) return str[0];

    /**初始化哈希表**/
    int hashSize = 256;
    int* hashTable = (int*)malloc(hashSize*sizeof(int));
    int i;
    for( i=0; i<hashSize; i++ )
        hashTable[i] = 0;

    /**第一次遍历--构建哈希表**/
    for( i=0; i<strlen(str); i++ )
        hashTable[str[i]]++;

    /**第二次遍历,当查找到哈希值为1的,立即返回**/
    for( i=0; i<strlen(str); i++ )
        if( hashTable[str[i]] == 1 )
            return str[i];
    return '\0';
}

 

 

                                                                                         梦想还是要有的,万一实现了呢~~~~~加油ヾ(◍°∇°◍)ノ゙~~~~~~~~~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值