-
Notifications
You must be signed in to change notification settings - Fork 0
/
1096.花括号展开-ii.c
92 lines (85 loc) · 2.69 KB
/
1096.花括号展开-ii.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
* @lc app=leetcode.cn id=1096 lang=c
*
* [1096] 花括号展开 II
*
* https://leetcode-cn.com/problems/brace-expansion-ii/description/
*
* algorithms
* Hard (52.30%)
* Likes: 28
* Dislikes: 0
* Total Accepted: 1K
* Total Submissions: 1.9K
* Testcase Example: '"{a,b}{c,{d,e}}"\r'
*
* 如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串。
*
* 花括号展开的表达式可以看作一个由 花括号、逗号 和 小写英文字母 组成的字符串,定义下面几条语法规则:
*
*
* 如果只给出单一的元素 x,那么表达式表示的字符串就只有 "x"。R(x) = {x}
*
*
* 例如,表达式 {"a"} 表示字符串 "a"。
* 而表达式 {"w"} 就表示字符串 "w"。
*
*
* 当两个或多个表达式并列,以逗号分隔时,我们取这些表达式中元素的并集。R({e_1,e_2,...}) = R(e_1) ∪ R(e_2) ∪
* ...
*
* 例如,表达式 "{a,b,c}" 表示字符串 "a","b","c"。
* 而表达式 "{{a,b},{b,c}}" 也可以表示字符串 "a","b","c"。
*
*
* 要是两个或多个表达式相接,中间没有隔开时,我们从这些表达式中各取一个元素依次连接形成字符串。R(e_1 + e_2) = {a + b for (a,
* b) in R(e_1) × R(e_2)}
*
* 例如,表达式 "{a,b}{c,d}" 表示字符串 "ac","ad","bc","bd"。
*
*
* 表达式之间允许嵌套,单一元素与表达式的连接也是允许的。
*
* 例如,表达式 "a{b,c,d}" 表示字符串 "ab","ac","ad"。
* 例如,表达式 "a{b,c}}{{d,e}f{g,h}" 可以表示字符串 "abdfg", "abdfh", "abefg", "abefh",
* "acdfg", "acdfh", "acefg", "acefh"。
*
*
*
*
* 给出表示基于给定语法规则的表达式 expression,返回它所表示的所有字符串组成的有序列表。
*
* 假如你希望以「集合」的概念了解此题,也可以通过点击 “显示英文描述” 获取详情。
*
*
*
* 示例 1:
*
* 输入:"{a,b}{c,{d,e}}"
* 输出:["ac","ad","ae","bc","bd","be"]
*
* 示例 2:
*
* 输入:"{{a,z},a{b,c},{ab,z}}"
* 输出:["a","ab","ac","z"]
* 解释:输出中 不应 出现重复的组合结果。
*
*
*
*
* 提示:
*
*
* 1 <= expression.length <= 50
* expression[i] 由 '{','}',',' 或小写英文字母组成
* 给出的表达式 expression 用以表示一组基于题目描述中语法构造的字符串
*
*
*/
// @lc code=start
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char ** braceExpansionII(char * expression, int* returnSize){
}
// @lc code=end