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.
Pythons sträng-API för intervjuer är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelse inför kodningsintervjuer, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelse inför kodningsintervjuer 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) # 3replace(), 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')) # Truestartswith(), 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')) # 4193Strä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)) # FalseSnabbreferens för strängar vid intervjuer
Ha dessa strängmetoder nära till hands i minnet inför intervjuer:
split / join— tolka och byggastrip / lstrip / rstrip— ta bort blanksteglower / upper— normalisera skiftlägefind / index— hitta delsträngarreplace— ersättningarisalnum / isalpha / isdigit— kontrollera teckenklasserord / chr— ASCII-aritmetik för problem med fasta alfabetstartswith / 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')) # FalseSnabbkontroll
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.
Lär dig Förberedelse inför kodningsintervjuer 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
- 90
- Lektioner
- 360
Vanliga frågor
Är lektionen ”Pythons sträng-API för intervjuer” gratis?
Ja – hela texten till ”Pythons sträng-API för intervjuer” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelse inför kodningsintervjuer, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelse inför kodningsintervjuer 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å Förberedelse inför kodningsintervjuer 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 Förberedelse inför kodningsintervjuer?
Du behöver inga förkunskaper. Utbildningen i Förberedelse inför kodningsintervjuer 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 Förberedelse inför kodningsintervjuer-lektionen?
Ja. Varje Förberedelse inför kodningsintervjuer-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
- Pythons sträng-API för intervjuer
- Sliding window för delsträngar
- Anagram och frekvenskartor för tecken
- Strängkodning, vändning och palindrom