文章目录

  • 1. 题目
  • 2. 解题

1. 题目

我们用一个特殊的字符串 S 来表示一份单词列表,之所以能展开成为一个列表,是因为这个字符串 S 中存在一个叫做「选项」的概念:

单词中的每个字母可能只有一个选项或存在多个备选项。

如果只有一个选项,那么该字母按原样表示。

如果存在多个选项,就会以花括号包裹来表示这些选项(使它们与其他字母分隔开),例如 "{a,b,c}" 表示 ["a", "b", "c"]

例子:"{a,b,c}d{e,f}" 可以表示单词列表 ["ade", "adf", "bde", "bdf", "cde", "cdf"]

请你按字典顺序,返回所有以这种方式形成的单词。

示例 1:
输入:"{a,b}c{d,e}f"
输出:["acdf","acef","bcdf","bcef"]示例 2:
输入:"abcd"
输出:["abcd"]提示:
1 <= S.length <= 50
你可以假设题目中不存在嵌套的花括号
在一对连续的花括号(开花括号与闭花括号)之间的所有字母都不会相同

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/brace-expansion
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

class Solution {vector<string> ans;
public:vector<string> expand(string S) {vector<vector<char>> str;vector<char> t;int count = 0;for(int i = 0; i < S.size(); ++i){if(isalpha(S[i]))t.push_back(S[i]);else if(S[i] == '}' || (S[i] == '{' && !t.empty())){if(S[i] == '}') count++;sort(t.begin(), t.end());str.push_back(t);t.clear();}}if(!t.empty()){sort(t.begin(), t.end());str.push_back(t);}if(count == 0) return {S};//没有花括号,直接返回dfs(str, "", 0);return ans;}void dfs(vector<vector<char>>& str, string s, int i){if(i == str.size()){ans.push_back(s);return;}for(int j = 0; j < str[i].size(); ++j)dfs(str, s+str[i][j], i+1);}
};

8 ms 8.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1087. 字母切换(回溯)相关推荐

  1. LeetCode之单词搜索(回溯法求解)

    题目 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母顺序,通过相邻的单元格内 ...

  2. Leetcode 40组合总数(回溯)Ⅱ41缺失的第一个正数42接雨水

    维护公众号:bigsai ,回复进群加入打卡,回复bigsai分享一些学习资源! 上周第一次 LeetCode 36有效的数独&37解数独(八皇后问题) 上周第二次 LeetCode 38外观 ...

  3. leetcode之字母异位词分组

    题目描述: 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次. 示例 1: 输 ...

  4. LeetCode 784. 字母大小写全排列(位运算回溯)

    1. 题目 给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串.返回所有可能得到的字符串集合. 示例: 输入: S = "a1b2" 输出: [&q ...

  5. LeetCode 49字母异位词分组50pow(x,n)51八皇后

    原创公众号:bigsai 如果不错记得点赞收藏! 关注回复 bigsai 领取Java进阶pdf资源,回复进群加入力扣打卡群. 上周打卡内容:43字符串相乘&44通配符匹配 45跳跃游戏&am ...

  6. LeetCode 848. 字母移位(前缀和+取模)

    文章目录 1. 题目 2. 解题 1. 题目 有一个由小写字母组成的字符串 S,和一个整数数组 shifts. 我们将字母表中的下一个字母称为原字母的 移位(由于字母表是环绕的, 'z' 将会变成 ' ...

  7. LeetCode 49. 字母异位词分组(哈希)

    1. 题目 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例:输入: ["eat", "tea", "ta ...

  8. LeetCode 77. 组合(回溯)

    1. 题目 给定两个整数 n 和 k,返回 1 - n 中所有可能的 k 个数的组合. 示例:输入: n = 4, k = 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[ ...

  9. LeetCode 78. 子集(回溯)

    文章目录 1. 题目信息 2. 解题 2.1 暴力回溯 2.2 循环 2.3 位运算 1. 题目信息 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重 ...

最新文章

  1. LeetCode Generate Parentheses
  2. 邹伟博士出书啦!——《强化学习》从基础概念、核心原理到应用案例(文末赠书)...
  3. volatile修饰变量
  4. OpenStack Weekly Rank 2015.08.24
  5. empinfo Oracle数据库,Oracle数据库---包
  6. linux 更改配置文件 禁止ssh,配置linux用户实现禁止ssh登陆但可用sftp登录
  7. 动画片动漫迷<未来的未来>高清图片壁纸
  8. 正则表达式---重复
  9. pta Percolate Up and Down(最小堆的插入维护和删除维护)
  10. MATLAB实现智能优化算法
  11. 《前端工具系列》最好用的git可视化工具——SourceTree
  12. 如何下载Eclipse历史版本
  13. 剑指offe 面试题5, 从尾到头打印链表
  14. AS 导出aar给Unity出打包出现Unable to merge android manifests
  15. 关于猫鼻支的防范和治疗
  16. win11右键菜单缺少“新建“选项解决办法“
  17. chrome控制台如何把vw显示成px_Chrome 开发者工具的11 个高级使用技巧
  18. 警惕“电子发票”邮件,多家企业中招
  19. 河大计算机学院足球队,我校第二十九届“河大杯”足球赛落幕
  20. 程序猿职场求生指南[手动狗头]

热门文章

  1. Random Forest算法中的参数详解
  2. java mapstring_ object 遍历_ListMapString,Object使用Java代码遍历以获取String,Object的值...
  3. VS2010中 C++创建DLL图解
  4. smtplib python教程_Python使用poplib模块和smtplib模块收发电子邮件的教程
  5. 新高考不选物理可以学计算机吗,新高考选科中物理真的那么重要吗?没有选物理是不是完了?...
  6. python 面向对象编程简称_Python基础-面向对象编程
  7. 执行jar包,输出信息到文件
  8. Mysql优化之执行计划查看
  9. 树莓派安装MySQL数据库与卸载
  10. 神奇的css3(2)动画