Fetch the repository succeeded.
# Time: O(p*l * log(p*l)), p is the production of all number of options
# , l is the length of a word
# Space: O(p*l)
import itertools
class Solution(object):
def expand(self, S): # nested is fine
"""
:type S: str
:rtype: List[str]
"""
def form_words(options):
words = map("".join, itertools.product(*options))
words.sort()
return words
def generate_option(expr, i):
option_set = set()
while i[0] != len(expr) and expr[i[0]] != "}":
i[0] += 1 # { or ,
for option in generate_words(expr, i):
option_set.add(option)
i[0] += 1 # }
option = list(option_set)
option.sort()
return option
def generate_words(expr, i):
options = []
while i[0] != len(expr) and expr[i[0]] not in ",}":
tmp = []
if expr[i[0]] not in "{,}":
tmp.append(expr[i[0]])
i[0] += 1 # a-z
elif expr[i[0]] == "{":
tmp = generate_option(expr, i)
options.append(tmp)
return form_words(options)
return generate_words(S, [0])
class Solution2(object):
def expand(self, S): # nested is fine
"""
:type S: str
:rtype: List[str]
"""
def form_words(options):
words = []
total = 1
for opt in options:
total *= len(opt)
for i in xrange(total):
tmp = []
for opt in reversed(options):
i, c = divmod(i, len(opt))
tmp.append(opt[c])
tmp.reverse()
words.append("".join(tmp))
words.sort()
return words
def generate_option(expr, i):
option_set = set()
while i[0] != len(expr) and expr[i[0]] != "}":
i[0] += 1 # { or ,
for option in generate_words(expr, i):
option_set.add(option)
i[0] += 1 # }
option = list(option_set)
option.sort()
return option
def generate_words(expr, i):
options = []
while i[0] != len(expr) and expr[i[0]] not in ",}":
tmp = []
if expr[i[0]] not in "{,}":
tmp.append(expr[i[0]])
i[0] += 1 # a-z
elif expr[i[0]] == "{":
tmp = generate_option(expr, i)
options.append(tmp)
return form_words(options)
return generate_words(S, [0])
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。