Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Muita gente não dá bola, mas ordenar os caracteres de duas strings ou arrays pode ser uma estratégia simples e eficiente para verificar se uma é uma permutação da outra.
Por exemplo, no problema clássico de verificar se uma string contém uma permutação de outra, ordenar os caracteres de ambos e comparar pode ser uma solução rápida. Se os arrays ordenados forem iguais, é porque um é uma permutação do outro.
Na prática, usar esse truque na hora de validar substrings ou verificar combinações em Java funciona bem, desde que o tamanho das strings não seja gigantesco. Para problemas de alta performance, talvez seja melhor usar mapas de frequência, mas para a maioria dos casos, ordenar resolve lindamente.
O que vocês acham? Essa abordagem é suficiente ou é melhor ir direto para contagem de frequência com map as? O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Sim, na minha experiência, pra validar permutação, usar mapas de frequência costuma ser mais eficiente do que ordenar, principalmente se precisar fazer várias verificações.
Concordo, essa estratégia de ordenar + comparar é bem prática pra casos medianos. Mas cuidado com strings muito grandes, a ordenação pode ficar pesada. Já passei por isso na hora de otimizar uma busca de permutação em produção.
hum, isso me pega em casos onde o tamanho das strings varia muito. Acho que a ordenação funciona bem pra strings menores, mas pra algo maior, uma abordagem com mapas pode evitar o custo de ordenação toda hora.
A dúvida que fica é: essa abordagem de ordenar funciona bem com caracteres unicode, acentos, etc? Ou ela é mais pra ASCII básico mesmo? Penso que em certos casos a ordenação pode não ser suficiente se a comparação não for bem definida.