DSA Interview Prep · leksjon

Pythons streng-API for intervjuer

Arbeid med mønstre for split, join, replace, find, ord/chr og strengformatering som brukes i intervjuproblemer med parsing og transformasjon.

Leksjon 1 av 413 trinn

Pythons streng-API for intervjuer er en gratis leksjon i DSA Interview Prep på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i DSA Interview Prep, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i DSA Interview Prep inneholder totalt 4 leksjoner.

Strenger er uforanderlige i Python

Python-strenger er uforanderlige – det er ikke mulig å endre et tegn på stedet. Hver strengoperasjon som ser ut til å endre en streng, oppretter faktisk en ny. Det betyr at s[0] = 'X' utløser en TypeError. Når De trenger manipulering på stedet, konverterer De først til en liste med tegn, utfører arbeidet og bruker deretter ''.join(chars) til å bygge strengen på nytt. Dette er standardmønsteret i intervjuspørsmål om mutering av strenger.

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() og join(): Parsing og bygging

s.split(sep) deler en streng ved et skilletegn og returnerer en liste med delstrenger. sep=None (standard) deler ved alle whitespace-tegn og forkaster tomme strenger – ideelt for parsing av mellomromseparert inndata. 'sep'.join(iterable) setter sammen strenger med et skilletegn mellom dem. Idiomet ' '.join(words) er den effektive måten å bygge en mellomromseparert streng fra en liste på – bruk aldri + i en løkke.

# 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(), index() og in

s.find(sub) returnerer indeksen for den første forekomsten av sub, eller -1 hvis den ikke finnes. s.index(sub) gjør det samme, men utløser ValueError hvis sub mangler – foretrekk find i intervjukode for å unngå ubehandlede unntak. Operatoren in for strenger utfører delstrengssøk på O(n×m), på samme måte som find. Bruk de valgfrie parameterne start og end til å søke innenfor et utsnitt uten å kopiere det.

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() og metoder for store og små bokstaver

s.replace(old, new, count=-1) returnerer en ny streng der alle forekomster (eller de første count) er erstattet. s.strip() fjerner innledende og avsluttende whitespace (eller angitte tegn). Metodene for store og små bokstaver – lower(), upper(), capitalize() og swapcase() – oppretter nye strenger. Husk returverdiene; metodene endrer ikke strengen. Normalisering av store og små bokstaver før sammenligning er avgjørende i problemer som ikke skiller mellom store og små bokstaver.

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() og isalnum()

Predikatmetoder for strenger returnerer boolske verdier og bruker O(k), der k er mønsterets lengde. s.startswith(prefix) og s.endswith(suffix) godtar tupler for flere alternativer. s.isalpha(), s.isdigit(), s.isalnum() og s.isspace() tester tegnklasser. Disse brukes i intervjuproblemer om gyldige palindromer, gyldige tall og URL-parsing.

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'

ord(), chr() og ASCII-aritmetikk

ord(c) returnerer Unicode-kodepunktet til tegnet c. chr(n) konverterer et heltall tilbake til et tegn. For små bokstaver gir ord(c) - ord('a') verdiene 0–25 – en ryddig måte å bygge frekvenstabeller med fast størrelse 26 uten en hash-tabell, noe som i praksis er raskere for det engelske alfabetet. Denne teknikken brukes i anagram- og palindromproblemer.

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)

Strengformatering for utskrift

I kodeintervjuer kan ryddig utskrift noen ganger være viktig. Python tilbyr tre formateringsstiler: %-formatering (gammel), .format() (klassisk) og f-strenger (moderne og foretrukket). F-strenger er de mest lesbare og støtter uttrykk direkte: f'{value:.2f}' formaterer et flyttall med to desimaler. Kunnskap om rask formatering av tall, utfylling av strenger og utskrift av tabeller reduserer feilsøkingstiden under press.

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'

Effektiv bygging av strenger med join()

Strengkonkatenering med + i en løkke oppretter en ny streng i hver iterasjon, noe som totalt koster O(n²) for n tegn. Det riktige mønsteret er å legge delene til i en liste og kalle ''.join(parts) til slutt, noe som gir O(n). Dette er et av de vanligste ytelses-antimønstrene i Python. Når De nevner denne avveiningen i et intervju, viser De at De forstår Pythons minnemodell.

# 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'

Tolke heltall og flyttall fra strenger

Konvertering mellom strenger og tall er grunnleggende i problemer med parsing. int(s) og float(s) tolker numeriske strenger; de utløser ValueError ved ugyldig inndata. For tryggere parsing kan De bruke en try-except-blokk. Strengmetodene isdigit() og isnumeric() forhåndsvaliderer før konvertering. Problemer som «atoi» (streng til heltall) krever håndtering av innledende mellomrom, fortegn og heltallsoverløp.

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

Strengslicing i algoritmeproblemer

Strengslicing brukes hele tiden, men har skjulte kostnader: s[i:j] oppretter en ny streng med lengden j-i på O(j-i)-tid. Når De skal sende delstrenger til rekursive funksjoner, bør De vurdere å sende indekser (start, end) i stedet for selve delstrengen for å unngå O(n²) allokeringskostnad. Denne optimaliseringen er viktig i problemer som longest-palindromic-substring, der mange delstrenger testes.

# 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

Hurtigreferanse for strengoppgaver i intervjuer

Hold disse strengmetodene klare til intervjuer:

  • split / join — analysere og bygge
  • strip / lstrip / rstrip — fjerne blanktegn
  • lower / upper — normalisere store og små bokstaver
  • find / index — finne delstrenger
  • replace — erstatninger
  • isalnum / isalpha / isdigit — sjekk av tegnklasser
  • ord / chr — ASCII-beregninger for problemer med faste alfabeter
  • startswith / endswith — sjekk av prefiks og suffiks

# 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

Hurtigsjekk

Test forståelsen av konseptene fra Data Structures & Algorithms — Coding Interview Prep i denne leksjonen.

Oppsummering av leksjonen

I denne leksjonen lærte du at: Python-strenger er uforanderlige — endringer krever at strengen konverteres til en liste, endres og deretter settes sammen igjen, ord/chr gjør det mulig å bruke frekvensarrayer med fast størrelse på 26 for problemer med små bokstaver, noe som er raskere enn hashtabeller for alfabeter med begrenset størrelse, og det koster O(n²) å bygge strenger med + i en løkke — samle alltid elementene i en liste og bruk ''.join() til slutt for O(n). Neste gang skal vi utforske teknikken med glidende vindu for delstrengsproblemer.

Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «Pythons streng-API for intervjuer» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien DSA Interview Prep, inkludert «Pythons streng-API for intervjuer», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i DSA Interview Prep inneholder totalt 4 leksjoner.

Hva lærer jeg i «Pythons streng-API for intervjuer»?

Arbeid med mønstre for split, join, replace, find, ord/chr og strengformatering som brukes i intervjuproblemer med parsing og transformasjon. Du øver på DSA Interview Prep med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med DSA Interview Prep?

Ingen tidligere erfaring er nødvendig. DSA Interview Prep på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Pythons streng-API for intervjuer»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne DSA Interview Prep-leksjonen?

Ja. Alle DSA Interview Prep-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Pythons streng-API for intervjuer
  2. Sliding window for delstrenger
  3. Anagrammer og frekvenskart for tegn
  4. Strengkoding, reversering og palindromer
← Tilbake til DSA Interview Prep