¿Cuál es la lógica detrás de los anagramas?

Busque en la web “todas las combinaciones posibles de una cadena”. Muchas personas han escrito el programa. Aquí está el de C, plagiado de uno de ellos.

Para verificar si dos cadenas son anagramas, encuentre todas las combinaciones de la cadena 1 y verifique si alguna de las combinaciones es igual a la cadena 2 (función de comparación de cadenas). Si alguna de las combinaciones es igual a la cadena 2, la cadena 2 es un anagrama de la cadena 1. Recuerde recortar todos los espacios internos (si la cadena es una oración y no solo una palabra) antes de hacer esto.

Lo siguiente es solo para imprimir todas las combinaciones, que es la parte principal de su problema. La comparación con su cadena 2 se puede construir fácilmente.

// Program to print all combination of size r in an array of size n

#include

void combinationUtil(int arr[], int data[], int start, int end,

index, int int index, int r);

// The main function that prints all combinations of size r

// in arr[] of size n. This function mainly uses combinationUtil()

void printCombination(int arr[], int n, int r)

{

// A temporary array to store all combination one by one

data[r]; int data[r];

// Print all combination using temprary array 'data[]'

combinationUtil(arr, data, 0, n-1, 0, r);

}

/* arr[] ---> Input Array

data[] ---> Temporary array to store current combination

start & end ---> Staring and Ending indexes in arr[]

index ---> Current index in data[]

r ---> Size of a combination to be printed */

void combinationUtil(int arr[], int data[], int start, int end,

index, int int index, int r)

{

// Current combination is ready to be printed, print it

if (index == r)

{

for (int j=0; j<r; j++)

printf("%d ", data[j]);

printf("\n");

return;

}

// replace index with all possible elements. The condition

// "end-i+1 >= r-index" makes sure that including one element

// at index will make a combination with remaining elements

// at remaining positions

for (int i=start; i= r-index; i++)

{

data[index] = arr[i];

combinationUtil(arr, data, i+1, end, index+1, r);

}

}

// Driver program to test above functions

int main()

{

int arr[] = {1, 2, 3, 4, 5};

int r = 3;

int n = sizeof(arr)/sizeof(arr[0]);

printCombination(arr, n, r);

}

1. Simplemente ordene las dos cadenas dadas usando cualquier algoritmo de clasificación.

2. Ahora compare las dos cadenas, si son iguales, entonces son anagramas de lo contrario no.