题目:
题目:在一个字符串中找到第一个只出现一次的字符。
如输入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;
}
路漫漫其修远兮,吾将上下而…