Pular para o conteudo principal

Strings: Manipulação e Padrões Frequentes em Entrevistas

Strings podem parecer um tema separado, mas quase sempre são sequência, regra de comparação e memória auxiliar bem escolhida.

Andrews Ribeiro

Andrews Ribeiro

Founder & Engineer

O problema

String dá um tipo especial de ansiedade em entrevista.

Porque parece simples demais para ser difícil e detalhista demais para improvisar.

Uma letra fora do lugar, uma regra de espaço esquecida ou uma normalização ignorada já bastam para quebrar a solução.

A reação comum cai em uma destas:

  • sair escrevendo manipulação de string no impulso
  • tentar resolver tudo com regex
  • tratar string como caso mágico separado do resto

Esse último ponto atrapalha bastante.

String não é um universo místico.

Na maior parte das vezes, é uma sequência com algumas regras extras.

Modelo mental

Quando uma pergunta vem com string, vale perguntar:

  • preciso comparar?
  • preciso contar?
  • preciso encontrar um trecho?
  • preciso validar formato?
  • preciso construir outra string?

Essas perguntas normalmente revelam o padrão real.

Muitos problemas de string caem em uma destas famílias:

  • frequência de caracteres
  • comparação normalizada
  • varredura com ponteiros
  • parsing simples
  • construção incremental de saída

Se quiser resumir em uma frase:

String costuma ser array de caracteres mais uma regra de negócio chata.

Quando você enxerga assim, o problema fica menos teatral.

Quebrando o problema

Descubra o que precisa ser preservado

Nem toda string precisa ser tratada exatamente como veio.

Às vezes importa:

  • caixa alta e baixa
  • espaços
  • pontuação
  • acentos
  • ordem exata

Às vezes não.

Essa definição muda a solução logo no começo.

Comparar anagrama com case-insensitive e ignorando espaço é uma coisa.

Comparar texto bruto byte a byte é outra.

Veja se o problema é de contagem

Se a pergunta for algo como:

  • duas strings têm os mesmos caracteres?
  • qual caractere mais aparece?
  • há repetição?

quase sempre um mapa de frequência aparece cedo.

Esse é um caso em que string vira só uma sequência que você percorre e contabiliza.

Veja se o problema é de janela ou trecho

Perguntas como:

  • maior substring sem repetição
  • menor trecho que contém certos caracteres
  • substring palíndroma

geralmente dependem de posição e fronteira.

Aí você pensa mais em ponteiros, janela e atualização incremental do estado.

Veja se o problema é de parsing

Às vezes a pergunta não é sobre caracteres isolados.

É sobre interpretar estrutura:

  • tokens separados por delimitador
  • número embutido em texto
  • validação de parênteses
  • montagem de path ou URL

Nesse caso, a pergunta útil passa a ser:

Qual estado mínimo eu preciso manter enquanto leio essa string?

Cuidado com construção de saída

Tem problema de string que parece barato, mas fica ruim porque a pessoa reconstrói texto de forma pouco eficiente várias vezes.

Em entrevista, isso não precisa virar micro-otimização obsessiva.

Mas vale mostrar consciência:

  • estou acumulando pedaços e juntando no final?
  • estou recriando string inteira em loop sem necessidade?

Exemplo simples

Pegue uma pergunta comum:

Dizer se duas strings são anagramas.

O erro comum é sair ordenando sem pensar.

Ordenar pode funcionar.

Mas antes vale perguntar:

  • tamanho diferente já elimina?
  • maiúscula e minúscula contam como iguais?
  • espaços entram ou não entram?

Se a regra for simples, uma solução boa é:

  1. se os tamanhos diferem, retorne falso
  2. percorra a primeira string contando caracteres
  3. percorra a segunda decrementando
  4. se algum contador ficar negativo, já falhou

O padrão aqui não é “problema especial de string”.

É:

  • sequência
  • frequência
  • comparação de contagem

Tempo linear.

Memória proporcional ao conjunto de caracteres acompanhado.

Erros comuns

  • Ignorar edge cases como string vazia, um caractere ou tamanho diferente.
  • Não definir cedo se caixa, espaço e pontuação importam.
  • Tratar regex como solução mágica para qualquer coisa.
  • Resolver problema de contagem como se fosse problema de ordenação só por reflexo.
  • Esquecer que imutabilidade de string pode cobrar custo extra em construção repetida.

Como um senior pensa

Quem tem mais experiência tende a desmontar o problema antes de mexer no texto.

O raciocínio costuma ser:

  • qual é a regra real?
  • o que precisa ser preservado?
  • estou comparando, contando, parseando ou buscando janela?
  • qual é o estado mínimo para resolver isso?

Isso reduz bug bobo e também evita complexidade desnecessária.

Outro ponto importante: string expõe atenção a detalhe.

E atenção a detalhe, em sistema real, importa em validação, parsing, segurança, analytics e UX.

Então não é um assunto menor.

É um bom lugar para mostrar precisão sem perder clareza.

O que o entrevistador quer ver

O entrevistador normalmente quer ver se você:

  • organiza o problema antes de codificar
  • identifica a família correta do padrão
  • trata edge cases sem ser lembrado de tudo
  • escolhe a estrutura certa em vez de apelar para truque opaco

Se você explica “isso aqui é mais um problema de frequência do que de manipulação textual sofisticada”, já está mostrando leitura melhor do problema.

String costuma confundir quem olha para o texto. Ajuda muito quem olha para a estrutura.

Em entrevista, resolver o detalhe certo vale mais do que escrever uma solução que parece esperta.

Resumo rápido

O que vale manter na cabeça

Checklist de pratica

Use isto ao responder

Você concluiu este artigo

Próximo artigo Two pointers e sliding window Artigo anterior Arrays e Hashmaps: os Padrões que Aparecem em 80% das Perguntas

Continue explorando

Artigos relacionados