leetcode 面試題08.08. 有重複字串的排列組合
題目描述:
有重複字串的排列組合。編寫一種方法,計算某字串的所有排列組合。
示例1:
輸入:S = “qqe”
輸出:[“eqq”,“qeq”,“qqe”]
示例2:
輸入:S = “ab”
輸出:[“ab”, “ba”]
思路:
回溯+剪枝
例如:qeq
首先排序:eqq
剪枝:1、剪去已經遍歷過的字元
2、減去一樣的字元
程式碼如下:
class Solution {
public:
int n=0;
vector<string>res;
vector<bool>visited;
string str="";
vector<string> permutation(string S) {
if(S.empty()) return {""};
n=S.size();
visited=vector(n,false);
sort(S.begin(),S.end());
dfs(S,0);
return res;
}
void dfs(string s,int cur){
if(cur==n){
res.push_back(str);
return;
}
for(int i=0;i<n;i++){
if(visited[i]) continue;//剪枝1
if(i>0&&s[i]==s[i-1]&&!visited[i-1]) continue;//剪枝2 這裡為什麼還有加一個!visited[i-1]??
str+=s[i];
visited[i]=true;
dfs(s,cur+1);
visited[i]=false;
str.pop_back();
}
}
};
解釋:
相關文章
- 無重複字串的排列組合字串
- 字串排列組合問題字串
- 有重複元素的排列問題
- 有重複元素的全排列
- 排列組合
- 面試有關字串中字元出現重複字元的面試問題,這裡都有了面試字串字元
- LeetCode-459-重複的子字串LeetCode字串
- LeetCode 567. 字串的排列LeetCode字串
- 【數學】組合數學 - 排列組合
- LeetCode題解(1668):最大重複子字串(Python)LeetCode字串Python
- 組合數學筆記-排列與組合筆記
- 在組合中找到重複的資料
- 第五章 字串專題 ---------------- 5.1 題解:判斷字串有無重複字元字串字元
- 列組合資料去重複值
- 回溯問題Python框架總結——排列組合問題Python框架
- 位元組跳動面試官這樣問有關字串的問題!!面試字串
- 重複的子字串字串
- LeetCode刷題進階之重新排列字串(1528)LeetCode字串
- js運算元組中資料排列組合JS
- 字串的排列字串
- CF1796C C. Maximum Set 題解 排列組合
- json字串返回的資料有重複的資料JSON字串
- JavaScript組合字串JavaScript字串
- 字串 全組合字串
- leetcode無重複字元的最長字串 python實現LeetCode字元字串Python
- 字串的全排列字串
- 【POJ 2249】 Binomial Showdown 組合數學 排列組合計算
- Relax! It's just a game(排列組合,簡單)GAM
- js去除重複字串JS字串
- 重複列印字串字串
- 【劍指offer】字串的組合字串
- 面試題目 字串的去重與壓縮(統計)面試題字串
- 【力扣】組合總和3(組合的去重)力扣
- 筆試小技巧--隔板法解排列組合問題(附程式碼)筆試
- 字串的升序降序排列字串
- 字串全排列字串
- 【刷題日記】leetcode-767 重構字串LeetCode字串
- leetcode 劍指 Offer 48. 最長不含重複字元的子字串LeetCode字元字串