题目描述:
A string S
represents a list of words.
Each letter in the word has 1 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, "{a,b,c}d{e,f}"
represents the list ["ade", "adf", "bde", "bdf", "cde", "cdf"]
.
Return all words that can be formed in this manner, in lexicographical order.
Example 1:
Input: "{a,b}c{d,e}f" Output: ["acdf","acef","bcdf","bcef"]
Example 2:
Input: "abcd" Output: ["abcd"]
Note:
1 <= S.length <= 50
- There are no nested curly brackets.
- All characters inside a pair of consecutive opening and ending curly brackets are different.
class Solution {
public:
vector<string> expand(string S) {
for(int i=0;i<S.size();i++)
{
if(S[i]=='{'||S[i]=='}')
S[i]=' ';
}
vector<vector<string>> v;
istringstream iss(S);
string tmp;
while(getline(iss,tmp,' '))
{
if(tmp.empty()) continue;
vector<string> options;
istringstream subiss(tmp);
string subtmp;
while(getline(subiss,subtmp,','))
options.push_back(subtmp);
v.push_back(options);
}
vector<string> result;
DFS(v,0,"",result);
sort(result.begin(),result.end());
return result;
}
void DFS(vector<vector<string>>& v, int i, string cur, vector<string>& result)
{
if(i==v.size())
{
result.push_back(cur);
return;
}
for(string option:v[i]) DFS(v,i+1,cur+option,result);
}
};