Leetcode 784 Letter Case Permutation
Given a string s, we can transform every letter individually to be lowercase or uppercase to create another string.
Return a list of all possible strings we could create. You can return the output in any order.
Input: s = "a1b2"
Output: ["a1b2","a1B2","A1b2","A1B2"]
Input: s = "3z4"
Output: ["3z4","3Z4"]
Input: s = "12345"
Output: ["12345"]
- Soruda bize bir string veriliyor.Bu stringin içinde harf ve sayılar var.Harfleri büyük ve küçük olarak değiştirerek yeni stringler üretebiliyoruz.Bu şekilde oluşturulabilecek tüm stringleri bulmamız isteniyor.
- dfs adında bir fonksiyon oluşturur ve rekürsif olarak fonksiyonu çağırırız.
- Fonksiyonun 4 parametresi olacaktır.İlk parametre stringimiz,index,harflerin eklendikçe tutulduğu bir liste olan path ve sonuçların tutulduğu res.
- Fonksiyonda ilk kontrol edeceğimiz nokta eğer index kelimenin uzunluğuna geldi ise demek ki kelime ile işimiz bitmiştir bulduğumuz değeri return edebiliriz.
- Aksi durumda indeksteki karakter harf mi yoksa rakam mı kontrol ederiz.
- Rakam ise ekleriz indexi bir arttırır, pathe karakteri ekler tekrar dfs fonksiyonunu çağırırız.
- Harf ise elimizdeki harfin bir küçük hali ve bir de büyük hali ile dfs fonksiyonunu tekrar çağırırız.
- Bu işlem dallanarak büyüyen bir yapıya dönüşür.
- String içindeki harf sayısına n dersek her seferinde 2li şekilde dallanacağı için T.C.(zaman karmaşıklığı) => (2^n) olur.
def letterCasePermutation(self, S: str) -> List[str]:
def dfs(s, index, path, res):
if index == len(s):
res.append(path)
return
else:
if s[index].isalpha():
dfs(s, index+1, path + s[index].lower(), res)
dfs(s, index+1, path + s[index].upper(), res)
else:
dfs(s, index+1, path + s[index], res)
res = []
dfs(S, 0, '', res)
return res