Skip to content

Prepare For Coder Interview – Denny

  • Basic
  • Medium
  • Hard
  • Architect
  • Life

LeetCode: Brace Expansion

Posted on August 9, 2019July 26, 2020 by braindenny

Brace Expansion



Similar Problems:

  • LeetCode: Letter Combinations of a Phone Number
  • CheatSheet: Leetcode For Code Interview
  • CheatSheet: Common Code Problems & Follow-ups
  • Tag: #backtracking, #combination

A string S represents a list of words.

Each letter in the word has 1 or more options. If there is one option, the letter is represented as is. If there is more than one option, then curly braces delimit the options. For example, “{a,b,c}” represents options [“a”, “b”, “c”].

For example, “{a,b,c}d{e,f}” represents the list [“ade”, “adf”, “bde”, “bdf”, “cde”, “cdf”].

Return all words that can be formed in this manner, in lexicographical order.

Example 1:

Input: "{a,b}c{d,e}f"
Output: ["acdf","acef","bcdf","bcef"]

Example 2:

Input: "abcd"
Output: ["abcd"]

Note:

  1. 1 <= S.length <= 50
  2. There are no nested curly brackets.
  3. All characters inside a pair of consecutive opening and ending curly brackets are different.

Github: code.dennyzhang.com

Credits To: leetcode.com

Leave me comments, if you have better ways to solve.


  • Solution:
// https://code.dennyzhang.com/brace-expansion
// Basic Ideas: backtracking
//
// Complexity:
import ("sort"
        "strings")
func backtrack(combination string, l [][]string, pos int, res *[]string) {
    if pos == len(l) {
        *res = append(*res, combination)
        return
    }
    for _, ch := range l[pos] {
        backtrack(combination+string(ch), l, pos+1, res)
    }
}
func expand(S string) []string {
    l := [][]string{}
    entry := ""
    for _, ch := range S+"{" {
        if ch == '{' || ch == '}' {
            if len(entry) != 0 {
                items := strings.Split(entry, ",")
                sort.Slice(items, func(i, j int) bool {
                    return items[i] < items[j]
                })
                l = append(l, items)
            }
            entry = ""
        } else {
            entry = entry+string(ch)
        }
    }

    res := []string{}
    backtrack("", l, 0, &res)
    return res
}
linkedin
github
slack

Post Views: 0
Posted in BasicTagged #backtracking, #combination

Post navigation

LeetCode: Article Views II
LeetCode: Max Consecutive Ones III

Leave a Reply Cancel reply

Your email address will not be published.

Tags

#array #backtracking #bfs #binarytree #bitmanipulation #blog #classic #codetemplate #combination #dfs #dynamicprogramming #game #graph #greedy #heap #inspiring #interval #linkedlist #manydetails #math #palindrome #recursive #slidingwindow #stack #string #subarray #trie #twopointer #twosum binarysearch editdistance hashmap intervaldp knapsack monotone oodesign presum rectangle redo review rotatelist series sql treetraversal unionfind

Recent Posts

  • a
  • a
  • a
  • a
  • a

Recent Comments

    Archives

    Categories

    • Amusing
    • Basic
    • Easy
    • Hard
    • Life
    • Medium
    • Resource
    • Review
    • Series
    • Uncategorized
    Proudly powered by WordPress | Theme: petals by Aurorum.