Gemstones : HackerRank Problem Solution

John has discovered various rocks. Each rock is composed of various elements, and each element is represented by a lower-case Latin letter from 'a' to 'z'. An element can be present multiple times in a rock. An element is called a gem-element if it occurs at least once in each of the rocks.

Given the list of N rocks with their compositions, display the number of gem-elements that exist in those rocks.


Input:

3

abcdde
baccd
eeabg

Output:


2


Explanation:


Only 'a' and 'b' are the two kinds of gem-elements, since these are the only characters that occur in every rock's composition.


Implementation:


#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAX 1000
/*
void swap(char *s,char *v)
    {
    char temp;
    temp=*s;
    *s=*v;
    *v=temp;
}

void sort(char *s)
    {
    int i,j;
    for(i=0;*(s+i);i++)
        {
        for(j=i+1;*(s+j);j++)
            {
            if(*(s+i)>*(s+j))
                swap(*(s+i),*(s+j));
        }
    }
}*/

void stringcopy(char *s,char *v)
    {
    int i=0;
    while(*(v+i))
        {
        *(s+i)=*(v+i);
        i++;
    }
    *(s+i)='\0';
}

void removedups(char *s)
    {
    int hash[26]={0};
    char *v;
    v=(char*)malloc(sizeof(char)*MAX);
    int i=0,j=0;
    while(*(s+i))
        {
        if(hash[*(s+i)-'a']==0)
            {
            *(v+j)=*(s+i);
            j++;
        }
        hash[*(s+i)-'a']=1;
        i++;
    }
    *(v+j)='\0';
    stringcopy(s,v);
}

int main() {

    char *s[MAX];
    int n;
    int i,j;
    int hash[26],count=0;
    memset(hash,0,sizeof(hash));
    scanf("%d",&n);
    for(i=0;i<n;i++)
        *(s+i)=(char*)malloc(sizeof(char)*1000);
    i=0;
    while(i<n)
        {
        scanf("%s",*(s+i));
        //sort(*(s+i));
        removedups(*(s+i));
        j=0;
        while(*(*(s+i)+j))
            {
            hash[*(*(s+i)+j) - 'a']++;
            j++;
        }
        i++;
    }
    i=0;
    while(i<26)
        {
        if(hash[i]==n)
            count++;
        i++;
    }
    printf("%d",count);
    return 0;
}