Ajuda com interpretação de solução

Essa ajuda para interpretar uma forma de resolver um problema foi enviada por Gilvan Melo.

A ajuda é em relação ao seguinte enunciado: escreva uma função que encontre todas as permutações de tamanho 2 (dois caracteres) de uma string, conforme:

permutação(str: String): string[]

exemplo: permutação(‘abc’) => [‘ab’, ‘ac’, ‘bc’, ‘ba’, ‘ca’, ‘cb’]

Uma string nada mais e do que um cadeia/vetor de caracteres. Ou seja, a entrada pode ser vista como:

ABCD
0123
String ABCD de 4 letras

Na tabela mostre uma string com quatro letras e também já mostrei na linha de baixo o valor de cada índice do vetor.

Para a permutação será necessário pegar cada letra e concatenar com as demais. Veja no exemplo que a letra nunca concatena com ela mesmo, mas pelo conceito de permutação poderia ocorrer se a letra aparecer mais de uma vez (isso facilita o algoritmo pois não é preciso controlar essa questão). Veja também que a permutação aceita “ab” e também “ba”.

Sendo assim, o algoritmo precisa pegar uma letra em um índice do vetor e concatenar com todos as letras nos demais índices do vetor. A dificuldade aqui normalmente envolve a necessidade ter um laço de repetição for dentro de outro, para pegar um letra e percorrer todas as demais.

Ilustrando pelo valor dos índices, será necessário concatenar as letras de dos seguintes pares de índices: (0,1), (0,2), (0,3), depois (1,0), (1,2), (1,3) e assim por diante.

Uma dúvida indicada pelo Gilvan foi “como farei para imprimir a permutação de tamanho 2 sendo que está em tamanho 3”. Nesse caso, veja que o tamanho da string de entrada não importa, embora seja necessário obter o tamanho dela para determinar a condição de parada para os laços for. Toda linguagem de programação possui uma função para obter o tamanho de uma string, sendo que em C essa função é a strlen().

Para concatenar letras/strings, cada linguagem de programação possui também formas de fazer isso. Na linguagem C essa função é a strcat().

Share

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.