社区讨论LinuxDo 最新
Leetcode每日一题 —— 1096. 花括号展开 II
佬友们中秋节快乐!! 力扣 LeetCode 1096. 花括号展开 II - 力扣(LeetCode) 1096. 花括号展开 II - 如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串。 花括号展开的表达式可以看作一个由 花括号、逗号 和 小写英文字母 组成的字符串,定义下面几条语法规则: 如果只给出单一的元素 x,那么表达式表示的字符串就只有 "x"。R(x) = {x} 例如,表达式 "a" 表示字符串 "a"。 而表达式 "w" 就表示字符串 "w"。 ... 思路 跟四…
内容摘要
作者:#魔法师
板块:#开发调优
佬友们中秋节快乐!!
力扣 LeetCode
1096. 花括号展开 II - 力扣(LeetCode)
1096. 花括号展开 II - 如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串。
花括号展开的表达式可以看作一个由 花括号、逗号 和 小写英文字母 组成的字符串,定义下面几条语法规则:
* 如果只给出单一的元素 x,那么表达式表示的字符串就只有 "x"。R(x) = {x}
* 例如,表达式 "a" 表示字符串 "a"。
* 而表达式 "w" 就表示字符串 "w"。
*...
思路
跟四则运算思路差不多,递归,根据优先级和符号依次运算。
花括号内,从左往右遍历。缓存now存还没结束的内容。
如果遇到{,找到对应的},然后递归它中间的内容,然后与当前缓存值连接。
如果遇到,,把缓存加到ans,重置当前缓存。
否则将缓存中的值依次与当前字符连接。
遍历结束后,如果缓存中还有值,加入到ans。
代码
class Solution {
private char[] chars;
public List<String> braceExpansionII(String expression) {
chars = expression.toCharArray();
Set<String> ans = dfs(0, chars.length - 1);
return ans.stream().sorted().toList();
}
private HashSet<String> dfs(int left, int right) {
int idx = left;
HashSet<String> ans = new HashSet<>();
HashSet<Str
资讯来源
LinuxDo