0Pricing
Coding Interview Prep · Aula

API de Strings do Python para Entrevistas

Pratique padrões com split, join, replace, find, ord/chr e formatação de strings que aparecem em problemas de análise e transformação.

API de Strings do Python para Entrevistas é uma aula grátis de Coding Interview Prep no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.

As cadeias de caracteres são imutáveis em Python

As cadeias de caracteres do Python são imutáveis — não é possível alterar um caractere no próprio lugar. Toda operação sobre uma cadeia que parece modificá-la, na verdade, cria uma nova cadeia. Isso significa que s[0] = 'X' gera um TypeError. Quando precisar manipular uma cadeia no próprio lugar, converta-a primeiro em uma lista de caracteres, faça o trabalho e depois use ''.join(chars) para reconstruí-la. Esse é o padrão usado em entrevistas para problemas de modificação de cadeias de caracteres.

s = 'hello'
# s[0] = 'H'  # TypeError!

# In-place mutation pattern:
chars = list(s)
chars[0] = 'H'
result = ''.join(chars)
print(result)  # 'Hello'

# Reversing a string
print(s[::-1])           # 'olleh'
print(''.join(reversed(s)))  # 'olleh'

split() e join(): análise e construção

s.split(sep) divide uma cadeia usando um delimitador e retorna uma lista de subcadeias. sep=None (padrão) divide em qualquer espaço em branco e descarta cadeias vazias — ideal para analisar uma entrada separada por espaços. 'sep'.join(iterable) concatena cadeias com um separador entre elas. A expressão idiomática ' '.join(words) é a forma eficiente de construir uma cadeia separada por espaços a partir de uma lista — nunca use + em um laço.

# split
sentence = '  hello   world  '
words = sentence.split()    # ['hello', 'world']
print(words)

csv = 'a,b,c,d'
parts = csv.split(',')      # ['a', 'b', 'c', 'd']
print(parts)

# join
print(' '.join(words))      # 'hello world'
print(','.join(['x','y','z']))  # 'x,y,z'

# Reverse words in a sentence
print(' '.join(sentence.split()[::-1]))  # 'world hello'

find(), consulta por índice e operador de pertencimento

s.find(sub) retorna o índice da primeira ocorrência de sub ou -1 se não for encontrada. s.index(sub) faz o mesmo, mas gera um ValueError se a ocorrência estiver ausente — prefira find no código de entrevistas para evitar exceções não tratadas. O operador in para cadeias realiza uma busca de subcadeia O(n×m), assim como find. Use os parâmetros opcionais start e end para pesquisar dentro de um trecho sem copiá-lo.

s = 'abcabcabc'
print(s.find('bc'))          # 1  (first occurrence)
print(s.find('bc', 2))       # 4  (search from index 2)
print(s.find('xyz'))         # -1 (not found)
print('abc' in s)            # True

# Count occurrences manually
count = 0
start = 0
while True:
    idx = s.find('bc', start)
    if idx == -1: break
    count += 1
    start = idx + 1
print(count)  # 3

replace(), strip() e métodos de maiúsculas e minúsculas

s.replace(old, new, count=-1) retorna uma nova cadeia com todas as ocorrências (ou as primeiras count) substituídas. s.strip() remove espaços em branco no início e no final (ou os caracteres especificados). Os métodos de maiúsculas e minúsculas lower(), upper(), capitalize() e swapcase() criam novas cadeias — lembre-se de guardar esses valores retornados, pois eles não modificam a cadeia. Normalizar maiúsculas e minúsculas antes da comparação é essencial em problemas que ignoram diferenças entre maiúsculas e minúsculas.

s = '  Hello, World!  '
print(s.strip())          # 'Hello, World!'
print(s.strip().lower())  # 'hello, world!'

print('banana'.replace('a', 'o'))   # 'bonono'
print('banana'.replace('a', 'o', 2)) # 'bonona'

# Normalise for comparison
def same_ignoring_case(a, b):
    return a.lower() == b.lower()

print(same_ignoring_case('Racecar', 'racecar'))  # True

startswith(), endswith() e isalnum()

Os métodos de cadeia que funcionam como predicados retornam valores booleanos e são O(k), onde k é o comprimento do padrão. s.startswith(prefix) e s.endswith(suffix) aceitam tuplas para várias alternativas. s.isalpha(), s.isdigit(), s.isalnum() e s.isspace() verificam classes de caracteres. Eles são usados em problemas de entrevistas sobre palíndromos válidos, números válidos e análise de endereços URL.

print('hello'.startswith('hel'))   # True
print('hello'.endswith(('lo', 'la')))  # True

# isalnum for palindrome filtering
def clean(s):
    return ''.join(c.lower() for c in s if c.isalnum())

print(clean('A man, a plan, a canal: Panama'))
# 'amanaplanacanalpanama'
print(clean('123abc!@#'))
# '123abc'

Códigos ASCII e aritmética de caracteres

ord(c) retorna o ponto de código Unicode do caractere c. chr(n) converte um inteiro novamente em caractere. Para letras minúsculas, ord(c) - ord('a') fornece um valor de 0 a 25 — uma forma simples de construir vetores de frequências de tamanho fixo 26 sem um mapa de dispersão, que na prática é mais rápida para o alfabeto inglês. Essa técnica aparece em problemas de anagramas e palíndromos.

print(ord('a'))   # 97
print(ord('z'))   # 122
print(chr(65))    # 'A'

# Frequency array for lowercase letters
def char_freq(s):
    freq = [0] * 26
    for c in s:
        freq[ord(c) - ord('a')] += 1
    return freq

print(char_freq('anagram'))  # [3,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0]
# index 0='a'(3), 6='g'(1), 12='m'(1), 17='r'(1)

Formatação de cadeias de caracteres para a saída

Em entrevistas de programação, às vezes uma saída organizada é importante. O Python oferece três estilos de formatação: formatação com % (antiga), .format() (clássica) e cadeias f (modernas e preferidas). As cadeias f são as mais legíveis e aceitam expressões diretamente: f'{value:.2f}' formata um número de ponto flutuante com 2 casas decimais. Saber formatar números, preencher cadeias e imprimir tabelas rapidamente reduz o tempo de depuração sob pressão.

name = 'Alice'
score = 95.678

# f-string (preferred in interviews)
print(f'{name}: {score:.1f}')      # Alice: 95.7
print(f'{name:>10}: {score:05.1f}') # right-align

# Zero-pad an integer
print(f'{42:04d}')   # 0042

# Join and format a list
nums = [1, 2, 3, 4]
print(', '.join(str(n) for n in nums))  # '1, 2, 3, 4'

Construção eficiente de cadeias com join()

A concatenação de cadeias com + em um laço cria uma nova cadeia a cada iteração, custando O(n²) no total para n caracteres. O padrão correto é: adicione as partes a uma lista e chame ''.join(parts) no final, obtendo O(n). Este é um dos antipadrões de desempenho mais comuns do Python. Em uma entrevista, mencionar essa troca demonstra que você entende o modelo de memória do Python.

# SLOW: O(n^2) due to repeated string allocation
def build_bad(chars):
    s = ''
    for c in chars:
        s += c  # creates a new string each time!
    return s

# FAST: O(n)
def build_good(chars):
    parts = []
    for c in chars:
        parts.append(c)
    return ''.join(parts)  # single allocation

# Or even more concise:
def build_best(chars):
    return ''.join(chars)

print(build_best(['h','e','l','l','o']))  # 'hello'

Analisar inteiros e números de ponto flutuante em cadeias de caracteres

Converter entre cadeias e números é fundamental em problemas de análise. int(s) e float(s) analisam cadeias numéricas; eles geram ValueError para entradas inválidas. Para uma análise mais segura, use um bloco de tentativa e exceção. Os métodos de cadeia isdigit() e isnumeric() fazem uma pré-validação antes da conversão. Problemas de conversão de cadeia para inteiro exigem lidar com espaços iniciais, sinais e estouro.

def my_atoi(s):
    s = s.lstrip()  # remove leading spaces
    if not s: return 0
    sign = 1
    idx = 0
    if s[0] in '-+':
        sign = -1 if s[0] == '-' else 1
        idx = 1
    num = 0
    while idx < len(s) and s[idx].isdigit():
        num = num * 10 + int(s[idx])
        idx += 1
    result = sign * num
    INT_MAX, INT_MIN = 2**31 - 1, -(2**31)
    return max(INT_MIN, min(INT_MAX, result))

print(my_atoi('   -42'))          # -42
print(my_atoi('4193 with words'))  # 4193

Fatiamento de cadeias de caracteres em problemas de algoritmos

O fatiamento de cadeias é usado constantemente, mas tem custos ocultos: s[i:j] cria uma nova cadeia de comprimento j-i em tempo O(j-i). Quando precisar passar subcadeias para funções recursivas, considere passar índices (início, fim) em vez da subcadeia propriamente dita, para evitar o custo de alocação O(n²). Essa otimização é importante em problemas como o da subcadeia palindrômica mais longa, nos quais muitas subcadeias são testadas.

# Naive: O(n^3) because slicing inside nested loops
def is_palindrome_naive(s):
    return s == s[::-1]  # O(n) slice + O(n) compare

# Pass indices to avoid allocating substrings
def is_palindrome_range(s, left, right):
    while left < right:
        if s[left] != s[right]:
            return False
        left += 1; right -= 1
    return True  # O(right-left) time, O(1) space

print(is_palindrome_range('racecar', 0, 6))  # True
print(is_palindrome_range('hello',   0, 4))  # False

Referência rápida de strings para entrevistas

Mantenha estes métodos de strings organizados mentalmente para entrevistas:

  • split / join — analisar e construir
  • strip / lstrip / rstrip — remover espaços em branco
  • lower / upper — normalizar maiúsculas e minúsculas
  • find / index — localizar subcadeias
  • replace — fazer substituições
  • isalnum / isalpha / isdigit — verificar classes de caracteres
  • ord / chr — fazer aritmética com ASCII em problemas de alfabeto fixo
  • startswith / endswith — verificar prefixos e sufixos

# Combining methods: reverse words, preserve spaces
def reverse_words(s):
    return ' '.join(reversed(s.split()))

print(reverse_words('  hello   world  '))
# 'world hello'

# Check anagram using sorted strings
def is_anagram(s, t):
    return sorted(s) == sorted(t)

print(is_anagram('anagram', 'nagaram'))  # True
print(is_anagram('rat', 'car'))          # False

Verificação rápida

Verifique sua compreensão dos conceitos de Estruturas de Dados & Algoritmos — Preparação para Entrevistas de Programação apresentados nesta lição.

Recapitulação da lição

Nesta lição, você aprendeu que: as strings do Python são imutáveis — para modificá-las, é necessário convertê-las em uma lista, fazer as alterações e depois juntá-las novamente; ord/chr permitem usar vetores de frequências de tamanho fixo 26 em problemas com letras minúsculas, que são mais rápidos do que tabelas de dispersão para alfabetos limitados; e construir strings com + em um laço custa O(n²) — sempre acumule os elementos em uma lista e use ''.join() no final para obter O(n). Em seguida, exploraremos a técnica da janela deslizante para problemas com subcadeias.

Perguntas Frequentes

A aula “API de Strings do Python para Entrevistas” é grátis?

Sim — o texto completo de “API de Strings do Python para Entrevistas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.

O que vou aprender em “API de Strings do Python para Entrevistas”?

Pratique padrões com split, join, replace, find, ord/chr e formatação de strings que aparecem em problemas de análise e transformação. Você pratica Coding Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Coding Interview Prep?

Nenhuma experiência prévia é necessária. Coding Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “API de Strings do Python para Entrevistas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Coding Interview Prep?

Sim. Cada aula de Coding Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. API de Strings do Python para Entrevistas
  2. Janela Deslizante para Substrings
  3. Anagramas e Mapas de Frequência de Caracteres
  4. Codificação, Reversão e Palíndromos de Strings
← Voltar para Coding Interview Prep