您的位置:首页 > 理论基础 > 数据结构算法

数据结构和算法经典100题-17题

2015-05-20 22:49 288 查看
题目:

题目:在一个字符串中找到第一个只出现一次的字符。

如输入abaccdeff,则输出b。

这道题是2006年google的一道笔试题。

题目分析:

题目分析:

由题目可知,此问题考察字符出现的次序问题。解此问题至少需要扫描一遍字符流,得不到log(n)的时间复杂度的方法解决。那么最好的办法是需要至少扫描一遍字符流,因为是字符串,降低了很大的难度。因为字符char的长度是8,,所以我们可以建立一个整形哈希表,其键就是字符的ASCII 码。里面记录字符出现的次数。分析到这里这个问题差不多解决了,我们还是上代码吧。

//
//  17th.cpp
//  100-alg-tests
//
//  Created by bobkentt on 15-5-20.
//  Copyright (c) 2015年 kedong. All rights reserved.
//

#include <stdio.h>
#include <iostream>
#include <string>

#include "17th.h"

using namespace std;

// 找到字符串中第一个只出现一次的字符
char findChar(char* str) {

if (NULL == str){
return 0;
}

char *ptr = &str[0];

int hashTable[256] = {0};
while ('\0' != *(ptr)) {
hashTable[*(ptr++)]++;
}

while ('\0' != *(ptr)) {
if (1 == hashTable[*ptr])
return *ptr;
ptr++;
}

cout<<"Cannot find this char"<<endl;

return *ptr;
}


路漫漫其修远兮,吾将上下而…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息