题目
Description
https://leetcode.com/problems/brace-expansion/
You are given a string s representing a list of words. Each letter in the word has one or more options.
If there is one option, the letter is represented as is.
If there is more than one option, then curly braces delimit the options. For example, “{a,b,c}” represents options [“a”, “b”, “c”].
For example, if s = “a{b,c}”, the first character is always ‘a’, but the second character can be ‘b’ or ‘c’. The original list is [“ab”, “ac”].
Return all words that can be formed in this manner, sorted in lexicographical order.
Example 1:
Input: s = “{a,b}c{d,e}f”
Output: [“acdf”,“acef”,“bcdf”,“bcef”]
Example 2:
Input: s = “abcd”
Output: [“abcd”]
Constraints:
1 <= s.length <= 50
s consists of curly brackets ‘{}’, commas ‘,’, and lowercase English letters.
s is guaranteed to be a valid input.
There are no nested curly brackets.
All characters inside a pair of consecutive opening and ending curly brackets are different.
题目被锁了,只能自己开个ide写的
解法1:暴力recursion
暴力解法无需复杂的返回值,只需传引用,在最后expand答案即可
void expand(string s,vector<string>& ans,string curr){
if(s.size() == 0) {
ans.push_back(curr);
return;
}
int i = 0;
if(s[i] == '{'){
string tmp = "";
vector<string> tmp_vec;
while(s[i] != '}'){
if(s[i] >= 'a' && s[i] <= 'z'){
tmp = tmp + s[i];
}else if(s[i]