Leetcode 131 Palindrome Partitioning

Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s.

A palindrome string is a string that reads the same backward as forward.


Input: s = "aab"
Output: [["a","a","b"],["aa","b"]]


Input: s = "a"
Output: [["a"]]

  • Soruda bize bir string listesi veriliyor.Ve bu listeden oluşturulabilecek palindrome string parçalarını bulmamız isteniyor.
  • Palindrome düz ve ters aynı şekilde okunabilen kelime demek.Örneğin “kaçak”.
  • Bu soruyu çözmek için backtracking ile bu stringten oluşturulabilecek her harf kümesini buluruz.
  • dfs çağrılıp ilk for döngüsü içine girildiğinde 3 alt küme oluşur. [a],[aa],[aab]
  • Bunlardan palindrom olanları bulunur sonuç kümesine eklenir.Palindrom olmayandan devam edilmez.
  • Çağrılar sonucu oluşan parçalar aşağıdaki gibidir.
[]
['a'] tüm liste dolaşılmadı
['a', 'a'] tüm liste dolaşılmadı
['a', 'a', 'b']  sonuç listesine ekle
['a', 'ab'] palindrom olmadığı için kesildi
['aa'] tüm liste dolaşılmadı
['aa', 'b']  sonuç listesine ekle
['aab'] palindrom olmadığı için kesildi

    def partition(self, s: str) -> List[List[str]]:
        res = []
        part = []
        
        def dfs(i):
            if i>= len(s): #tüm liste dolaşıldı ise ekle palindrom olmayanlar zaten i 3 olamaz.
                res.append(part.copy())
                return
            for j in range(i, len(s)):
                if self.isPali(s,i,j):
                    part.append(s[i:j+1])
                    dfs(j + 1)
                    part.pop()
                    
        dfs(0)
        return res
    
    def isPali(self, s, l, r):
        while l < r:
            if s[l] != s[r]:
                return False
            l,r = l +1, r-1
        return True