|
2 | 2 |
|
3 | 3 | ## 题目描述
|
4 | 4 | <!-- 这里写题目描述 -->
|
5 |
| -<p>如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串。</p> |
6 | 5 |
|
7 |
| -<p>花括号展开的表达式可以看作一个由 <strong>花括号</strong>、<strong>逗号</strong> 和 <strong>小写英文字母</strong> 组成的字符串,定义下面几条语法规则:</p> |
| 6 | +如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串。 |
8 | 7 |
|
9 |
| -<ul> |
10 |
| - <li>如果只给出单一的元素 <code>x</code>,那么表达式表示的字符串就只有 <code>"x"</code>。 |
| 8 | +花括号展开的表达式可以看作一个由 **花括号**、**逗号** 和 **小写英文字母** 组成的字符串,定义下面几条语法规则: |
11 | 9 |
|
12 |
| - <ul> |
13 |
| - <li>例如,表达式 <code>{a}</code> 表示字符串 <code>"a"</code>。</li> |
14 |
| - <li>而表达式 <code>{ab}</code> 就表示字符串 <code>"ab"</code>。</li> |
15 |
| - </ul> |
16 |
| - </li> |
17 |
| - <li>当两个或多个表达式并列,以逗号分隔时,我们取这些表达式中元素的并集。 |
18 |
| - <ul> |
19 |
| - <li>例如,表达式 <code>{a,b,c}</code> 表示字符串 <code>"a","b","c"</code>。</li> |
20 |
| - <li>而表达式 <code>{a,b},{b,c}</code> 也可以表示字符串 <code>"a","b","c"</code>。</li> |
21 |
| - </ul> |
22 |
| - </li> |
23 |
| - <li>要是两个或多个表达式相接,中间没有隔开时,我们从这些表达式中各取一个元素依次连接形成字符串。 |
24 |
| - <ul> |
25 |
| - <li>例如,表达式 <code>{a,b}{c,d}</code> 表示字符串 <code>"ac","ad","bc","bd"</code>。</li> |
26 |
| - </ul> |
27 |
| - </li> |
28 |
| - <li>表达式之间允许嵌套,单一元素与表达式的连接也是允许的。 |
29 |
| - <ul> |
30 |
| - <li>例如,表达式 <code>a{b,c,d}</code> 表示字符串 <code>"ab","ac","ad"</code>。</li> |
31 |
| - <li>例如,表达式 <code>{a{b,c}}{{d,e}f{g,h}}</code> 可以代换为 <code>{ab,ac}{dfg,dfh,efg,efh}</code>,表示字符串 <code>"abdfg", "abdfh", "abefg", "abefh", "acdfg", "acdfh", "acefg", "acefh</code>"。</li> |
32 |
| - </ul> |
33 |
| - </li> |
34 |
| -</ul> |
| 10 | +- 如果只给出单一的元素 `x`,那么表达式表示的字符串就只有 `"x"`。 |
| 11 | + - 例如,表达式 `{a}` 表示字符串 `"a"`。 |
| 12 | + - 而表达式 `{ab}` 就表示字符串 `"ab"`。 |
| 13 | +- 当两个或多个表达式并列,以逗号分隔时,我们取这些表达式中元素的并集。 |
| 14 | + - 例如,表达式 `{a,b,c}` 表示字符串 `"a","b","c"`。 |
| 15 | + - 而表达式 `{a,b},{b,c}` 也可以表示字符串 `"a","b","c"`。 |
| 16 | +- 要是两个或多个表达式相接,中间没有隔开时,我们从这些表达式中各取一个元素依次连接形成字符串。 |
| 17 | + - 例如,表达式 `{a,b}{c,d}` 表示字符串 `"ac","ad","bc","bd"`。 |
| 18 | +- 表达式之间允许嵌套,单一元素与表达式的连接也是允许的。 |
| 19 | + - 例如,表达式 `a{b,c,d}` 表示字符串 `"ab","ac","ad"`。 |
| 20 | + - 例如,表达式 `{a{b,c}}{{d,e}f{g,h}}` 可以代换为 `{ab,ac}{dfg,dfh,efg,efh}`,表示字符串 `"abdfg", "abdfh", "abefg", "abefh", "acdfg", "acdfh", "acefg", "acefh"`。 |
35 | 21 |
|
36 |
| -<p>给出表示基于给定语法规则的表达式 <code>expression</code>,返回它所表示的所有字符串组成的有序列表。</p> |
37 | 22 |
|
38 |
| -<p>假如你希望以「集合」的概念了解此题,也可以通过点击 “<strong>显示英文描述</strong>” 获取详情。</p> |
| 23 | +给出表示基于给定语法规则的表达式 `expression`,返回它所表示的所有字符串组成的有序列表。 |
39 | 24 |
|
40 |
| -<p> </p> |
41 | 25 |
|
42 |
| -<p><strong>示例 1:</strong></p> |
| 26 | +**示例 1:** |
43 | 27 |
|
44 |
| -<pre><strong>输入:</strong>"{a,b}{c{d,e}}" |
45 |
| -<strong>输出:</strong>["acd","ace","bcd","bce"] |
46 |
| -</pre> |
47 |
| - |
48 |
| -<p><strong>示例 2:</strong></p> |
49 |
| - |
50 |
| -<pre><strong>输入:</strong>"{{a,z}, a{b,c}, {ab,z}}" |
51 |
| -<strong>输出:</strong>["a","ab","ac","z"] |
52 |
| -<strong>解释:</strong>输出中 <strong>不应 </strong>出现重复的组合结果。 |
53 |
| -</pre> |
54 |
| - |
55 |
| -<p> </p> |
| 28 | +``` |
| 29 | +输入:"{a,b}{c{d,e}}" |
| 30 | +输出:["acd","ace","bcd","bce"] |
| 31 | +``` |
56 | 32 |
|
57 |
| -<p><strong>提示:</strong></p> |
| 33 | +**示例 2:** |
58 | 34 |
|
59 |
| -<ol> |
60 |
| - <li><code>1 <= expression.length <= 50</code></li> |
61 |
| - <li><code>expression[i]</code> 由 <code>'{'</code>,<code>'}'</code>,<code>','</code> 或小写英文字母组成</li> |
62 |
| - <li>给出的表达式 <code>expression</code> 用以表示一组基于题目描述中语法构造的字符串</li> |
63 |
| -</ol> |
| 35 | +``` |
| 36 | +输入:"{{a,z}, a{b,c}, {ab,z}}" |
| 37 | +输出:["a","ab","ac","z"] |
| 38 | +解释:输出中 不应 出现重复的组合结果。 |
| 39 | +``` |
64 | 40 |
|
| 41 | +**提示:** |
65 | 42 |
|
| 43 | +1. `1 <= expression.length <= 50` |
| 44 | +2. `expression[i]` 由 `'{'`,`'}'`,`','` 或小写英文字母组成 |
| 45 | +3. 给出的表达式 `expression` 用以表示一组基于题目描述中语法构造的字符串 |
66 | 46 |
|
67 | 47 | ## 解法
|
68 | 48 | <!-- 这里可写通用的实现逻辑 -->
|
|
0 commit comments