123456789101112131415161718192021222324252627282930313233343536373839 |
- package main
- func partition(s string) [][]string {
- length := len(s)
- lists := [][]string{}
- list := []string{}
- partitionHelper(&lists, &list, s, 0, length)
- return lists
- }
- // Backtracking algorithm, try to understand & remember
- func partitionHelper(lists *[][]string, list *[]string, s string, beg, end int) {
- if beg == end {
- newList := make([]string, len(*list))
- copy(newList, *list)
- *lists = append(*lists, newList)
- return
- }
- for i := beg + 1; i <= end; i++ {
- if isPalindrome(s, beg, i) {
- *list = append(*list, s[beg:i])
- partitionHelper(lists, list, s, i, end)
- *list = (*list)[:len(*list)-1] // Backtrack
- }
- }
- }
- func isPalindrome(s string, beg, end int) bool {
- for ; beg < end-1; beg, end = beg+1, end-1 {
- if s[beg] != s[end-1] {
- return false
- }
- }
- return true
- }
- // func main() {
- // fmt.Println(partition("aabbb"))
- // }
|