DSA Interview Prep · Lektion

Pythons sträng-API för intervjuer

Arbeta med mönster för split, join, replace, find, ord/chr och strängformatering som förekommer i intervjuproblem med parsning och transformering.

Lektion 1 av 413 steg

Pythons sträng-API för intervjuer är en gratis lektion i DSA Interview Prep på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för DSA Interview Prep, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i DSA Interview Prep innehåller totalt 4 lektioner.

Strängar är oföränderliga i Python

Pythonsträngar är oföränderliga — ni kan inte ändra ett tecken på plats. Varje strängoperation som ser ut att ändra en sträng skapar i själva verket en ny sträng. Det innebär att s[0] = 'X' utlöser ett TypeError. När ni behöver ändra en sträng på plats konverterar ni den först till en lista med tecken, utför ändringarna och använder sedan ''.join(chars) för att bygga strängen igen. Detta är det vanliga intervjumönstret för problem som ändrar strängar.

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() och join(): parsning och uppbyggnad

s.split(sep) delar upp en sträng vid en avgränsare och returnerar en lista med delsträngar. sep=None (standardvärdet) delar upp vid alla typer av blanksteg och tar bort tomma strängar — idealiskt för att tolka indata med blankstegsseparering. 'sep'.join(iterable) sammanfogar strängar med en avgränsare mellan dem. Uttrycket ' '.join(words) är det effektiva sättet att bygga en blankstegsseparerad sträng från en lista — använd aldrig + i en loop.

# 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() och in

s.find(sub) returnerar indexet för den första förekomsten av sub, eller -1 om den inte hittas. s.index(sub) gör samma sak men utlöser ValueError om delsträngen saknas — föredra find i intervjukod för att undvika ohanterade undantag. Operatorn in för strängar utför delsträngssökning i O(n×m), precis som find. Använd de valfria parametrarna start och end för att söka inom ett intervall utan att kopiera 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() och metoder för skiftläge

s.replace(old, new, count=-1) returnerar en ny sträng där alla förekomster (eller de första count förekomsterna) har ersatts. s.strip() tar bort inledande och avslutande blanksteg (eller angivna tecken). Metoderna lower(), upper(), capitalize() och swapcase() skapar nya strängar — kom ihåg att spara returvärdena; metoderna ändrar inte strängen. Att normalisera skiftläget före jämförelser är viktigt i problem som inte ska skilja på stora och små bokstäver.

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

Predikatmetoder för strängar returnerar booleska värden och har komplexiteten O(k), där k är mönstrets längd. s.startswith(prefix) och s.endswith(suffix) accepterar tupler för flera alternativ. s.isalpha(), s.isdigit(), s.isalnum() och s.isspace() testar teckenklasser. Dessa metoder används i intervjuproblem om giltiga palindrom, giltiga tal och URL-parsning.

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() och ASCII-aritmetik

ord(c) returnerar Unicode-kodpunkten för tecknet c. chr(n) konverterar ett heltal tillbaka till ett tecken. För små bokstäver ger ord(c) - ord('a') värdena 0–25 — ett enkelt sätt att bygga frekvensarrayer med den fasta storleken 26 utan en hashtabell, vilket i praktiken är snabbare för det engelska alfabetet. Tekniken förekommer i problem om anagram och palindrom.

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)

Strängformatering för utdata

I kodningsintervjuer kan välformaterade utdata ibland vara viktiga. Python erbjuder tre formateringsstilar: %-formatering (gammal), .format() (klassisk) och f-strängar (modern, rekommenderad). F-strängar är lättast att läsa och stöder uttryck direkt: f'{value:.2f}' formaterar ett flyttal med två decimaler. Om ni kan formatera tal, fylla ut strängar och skriva ut tabeller snabbt minskar ni felsökningstiden 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 strängbyggnad med join()

Strängkonkatenering med + i en loop skapar en ny sträng vid varje iteration, vilket kostar totalt O(n²) för n tecken. Det korrekta mönstret är att lägga delarna i en lista och anropa ''.join(parts) i slutet, vilket ger O(n). Detta är ett av de vanligaste prestandamönstren att undvika i Python. Om ni nämner den här avvägningen i en intervju visar det att ni förstår Pythons minnesmodell.

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

Parsa heltal och flyttal från strängar

Att konvertera mellan strängar och tal är grundläggande i tolkningsproblem. int(s) och float(s) tolkar numeriska strängar; de utlöser ValueError för ogiltig indata. För säkrare parsning kan ni använda ett try-except-block. Strängmetoderna isdigit() och isnumeric() kan validera indata före konverteringen. Problem som ”atoi” (sträng till heltal) kräver hantering av inledande blanksteg, tecken och spill.

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

Strängsegmentering i algoritmproblem

Strängsegmentering används hela tiden men har dolda kostnader: s[i:j] skapar en ny sträng med längden j-i i O(j-i)-tid. När ni behöver skicka delsträngar till rekursiva funktioner bör ni överväga att skicka index (start, end) i stället för själva delsträngen för att undvika O(n²) i allokeringskostnad. Den här optimeringen är viktig i problem som longest-palindromic-substring, där många delsträngar testas.

# 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

Snabbreferens för strängar vid intervjuer

Ha dessa strängmetoder nära till hands i minnet inför intervjuer:

  • split / join — tolka och bygga
  • strip / lstrip / rstrip — ta bort blanksteg
  • lower / upper — normalisera skiftläge
  • find / index — hitta delsträngar
  • replace — ersättningar
  • isalnum / isalpha / isdigit — kontrollera teckenklasser
  • ord / chr — ASCII-aritmetik för problem med fasta alfabet
  • startswith / endswith — kontrollera prefix och suffix

# 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

Snabbkontroll

Testa er förståelse av begreppen i Data Structures & Algorithms — Coding Interview Prep från den här lektionen.

Sammanfattning av lektionen

I den här lektionen lärde ni er: Python-strängar är oföränderliga — om de ska ändras måste ni konvertera dem till en lista, ändra listan och sedan sammanfoga den igen, ord/chr möjliggör frekvensarrayer med fast storlek 26 för problem med gemener, vilket är snabbare än hashtabeller för begränsade alfabet, och om ni bygger strängar med + i en loop kostar det O(n²) — samla alltid elementen i en lista och använd ''.join() i slutet för O(n). Härnäst går vi igenom sliding window-tekniken för delsträngsproblem.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Pythons sträng-API för intervjuer” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen DSA Interview Prep, inklusive ”Pythons sträng-API för intervjuer”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i DSA Interview Prep innehåller totalt 4 lektioner.

Vad lär jag mig i ”Pythons sträng-API för intervjuer”?

Arbeta med mönster för split, join, replace, find, ord/chr och strängformatering som förekommer i intervjuproblem med parsning och transformering. Ni övar på DSA Interview Prep med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig DSA Interview Prep?

Du behöver inga förkunskaper. Utbildningen i DSA Interview Prep på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Pythons sträng-API för intervjuer”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här DSA Interview Prep-lektionen?

Ja. Varje DSA Interview Prep-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Pythons sträng-API för intervjuer
  2. Sliding window för delsträngar
  3. Anagram och frekvenskartor för tecken
  4. Strängkodning, vändning och palindrom
← Tillbaka till DSA Interview Prep