prateekjain12
BAN USER/* Following code will sort array so that all anagrams are together rather than arranging in lexicographic order.
For Ex. { "ef","bac","tre", "abc","ret"}
{ "ef", "bac","abc", "tre","ret"}
*/
void sort_Anagram(char *a[], size n)
{
int i,j,k;
for(i=0;i <n-2; i++)
{
k=i+1
for(j=k+1; j < n-1 ; j++)
{
if(is_Anagram(a[i],a[j]))
{
swap(&a[k],&a[j]);
k++;
}
}
i=k;
}
}
void swap(char **a, char **b)
{
char **c;
c=b; b=a; a=c;
}
int is_Anagram(char *a,char *b)
{
int i=0, alpha[26];
if(sizeof(a)!=sizeof(b))
return 0;
for(i=0;i<26;i++)
alpha[i]=0;
while(a[0]!= '\0' ))
{
alpha[a[0]-48]++;
a++;
}
while(b[0]!= '\0' ))
{
alpha[b[0]-48]--;
b++;
}
for(i=0;i<26;i++)
{
if( alpha[i]!=0)
return 0;
}
return 1;
}
int find_K(int array[],size n, int k)
{
int diff;
if( (k < a[0]-n-1) || ( k > a[0]+n-1) )
return 0; // not found
i=0;
while(i < n )
{
diff = (k < a[i] )? a[i]- k : k- a[i]);
if(diff==0)
return 1; // found
else
{
i+=diff;
}
}
return 0; // not found
}
ONE good Solution can as follow:
- prateekjain12 August 30, 2012Take an array of int of length 26 like int word[26]; and
initialize it to 0
for(i=0;i<26;i++) word[i] = 0;
Now process each character of Array A as
for(i=0;A[i]!='\0'; i++)
{
word[A[i]-65] ++; //considering all charater in array are small letter (not capital)
}
Now process each character of Array B as
for(i=0;B[i]!='\0'; i++)
{
word[B[i]-65] --; //considering all charater in array are small letter (not capital)
}
Now check if any value in word is not zero then return false else true
flag=true;
for(i=0;i<26;i++)
{
if(word[i] != 0)
{
flag=false;
break;
}
}
return flag;
=====================
False means all character of A is not in B
True means all character of A is in B