1: Construct character count array from the input string.
count['a'] = 2
count['b'] = 1
count['c'] = 2
count['d'] = 2
count['e'] = 1
count['f'] = 2
……
2: Get the first character who's count is 1 ('b').
/* Returns an array of size 256 containg count of characters in the passed char array */
#define NO_OF_CHARS 256
int *getCharCountArray(char *str)
{
int *count = (int *)calloc(sizeof(int), NO_OF_CHARS);
int i;
for (i = 0; *(str+i); i++)
count[*(str+i)]++;
return count;
}
/* The function returns index of first non-repeating character in a string. If all characters are repeating
then returns -1 */
int firstNonRepeating(char *str)
{
int *count = getCharCountArray(str);
int index = -1, i;
for (i = 0; *(str+i); i++)
{
if (count[*(str+i)] == 1)
{
index = i;
break;
}
}
free(count); // To avoid memory leak
return index;
}
/* Driver program to test above function */
int main()
{
char str[] = "abaccdeff";
int index = firstNonRepeating(str);
if (index == -1)
printf("Either all characters are repeating or string is empty");
else
printf("First non-repeating character is %c", str[index]);
getchar();
return 0;
}
Credit: geeksforgeeks