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