第17 题:
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
分析:这道题是2006 年google 的一道笔试题。
申请26个数据结构来记录每个字符出现的次数及最后一个的位置。
如果字符包含数字或者其他符号的话,可以申请256个该类型数组结构来存储。
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
struct Record
{
int index;
int count;
};
char getFirstOnlyOneChar(string& str)
{
// all char in str should be lower case
Record records[26];
memset(records, 0, sizeof(Record) * 26);
for (int i = 0; i < str.length(); i++)
{
assert((str[i] <= 'z') && (str[i] >= 'a'));
records['z' - str[i]].count++;
records['z' - str[i]].index = i;
}
int index = str.length();
for (int i = 0; i < 26; i++)
{
if (records[i].count == 1)
{
if (records[i].index < index)
index = records[i].index;
}
}
return str[index];
}
/*
int main(void)
{
string str = "abaccdeff";
cout << getFirstOnlyOneChar(str) << endl;
system("pause");
return 0;
}
*/