牛客网题目:
于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。
给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
"qywyer23tdd",11
返回:y
类似的,如果题目要求返回首个非重复字符,都是利用哈希表来解决,建立字符-字符出现的频率键值对。
由于char是8位,故初始化一个256大小的数组即可,初始时都为0,表示每个字符均没有出现。
从前之后遍历字符串,若其在hashtable中对应的值为0,表示该字符是第一次出现,若不为0,表示前面已经有该字符出现了,该字符即要查找的首个重复字符。
char findFirstRepeat(string A, int n)
{
// write code here
char ans;
int hashTable[256] = {0};
for( int i = 0;i < n ;i++)
{
if(!hashTable[int(A[i])]) //
{
hashTable[int(A[i])]++;
}
else
{
ans = A[i];
break;
}
}
return ans;
若是返回首个非重复字符,相应代码如下:
for( int i = 0;i < n ;i++)
hashTable[int(A[i])]++;
for( int i = 0;i < n ;i++)
if(hashTable[int(A[i])]==1)
return A[i]