Descrição do problema:
Dadas duas cadeias, se os tipos de caracteres que aparecem nas duas cadeias forem iguais e o número de ocorrências de cada caractere for o mesmo, as duas cadeias serão flexionadas.
Supondo que os códigos de caracteres exibidos estejam entre 0 e 255 (intervalo fechado)
Implementação do algoritmo:
public boolean isDeformation (String str1, String str2) {
if (str1 == null || str2 == null || str1.length ()! = str2.length ()) {
return false;
}
char [] chars1 = str1. toCharArray ();
char [] chars2 = str2.toCharArray ();
int [] map = new int [256];
for (int i = 0; i <chars1.length; i ++) {
map [chars1 [i]] + +;
}
for (int i = 0; i <chars2.length; i ++) {
if (map [chars2 [i]] - == 0) {// Aqui está o julgamento antes de executar a operação de decremento, quando "== "Quando estabelecido, significa que os elementos atuais em chars2 são mais
falsos que chars1 ;
}
}
retornam true;
}
Análise de algoritmo:
1. Primeiro, compare o julgamento não vazio e o comprimento da corda;
2. Converta as duas seqüências em matrizes de caracteres, respectivamente;
3. Adicione uma matriz estatística para contar os valores de cada caractere na primeira matriz de caracteres;
4. Atravesse a segunda matriz e compare os valores dos caracteres na segunda matriz com os valores estatísticos da primeira matriz.