0 votes

How to find if a string is a permutation of another string using C?

0 votes

```
void permutation(char str[],char str2[])
{
int size;
int i=0,j=0;
int review = 0;
if(strlen(str) != strlen(str2))
{
printf("string 2 is not permutation of string 1");
return 0;
}
size = strlen(str);
while(i != size)
{
j=0;
while(j != size)
{
if(str[i] != str2[j])
{
j++;
}
else
{
str[i] = '*';
str2[j] ='+';
review++;
}
}
i++;
}
if(size == review)
{
printf("str 2 is permutation of str 1");
}
else
{
printf("str 2 is not permutation of str 1");
}
}
```

0 votes

**Algorithm**

1) Create count arrays of size 256 for both strings. Initialize all values in count arrays as 0.

2) Iterate through every character of both strings and increment the count of character in the corresponding count arrays.

3) Compare count arrays. If both count arrays are same, then return true.

```
# define NO_OF_CHARS 256
bool permutation(char *str1, char *str2)
{
// Create 2 count arrays and initialize all values as 0
int count1[NO_OF_CHARS] = {0};
int count2[NO_OF_CHARS] = {0};
int i;
// For each character in input strings, increment count in
// the corresponding count array
for (i = 0; str1[i] && str2[i]; i++)
{
count1[str1[i]]++;
count2[str2[i]]++;
}
// If both strings are of different length. Removing this
// condition will make the program fail for strings like
// "aaca" and "aca"
if (str1[i] || str2[i])
return false;
// Compare count arrays
for (i = 0; i < NO_OF_CHARS; i++)
if (count1[i] != count2[i])
return false;
return true; // Str1 is permutation of str2
}
```

Credit: geeksforgeeks

...