面试题 08.08. 有重复字符串的排列组合-----回溯法

题目表述

有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。

示例:
示例1:

输入:S = "qqe"
输出:["eqq","qeq","qqe"]

回溯法

这题主要需要考虑去重问题,去重包括枝去重和层去重
支去重:visited或used数组去重
层去重:
①i>0 && visited[i-1]false && nums[i]nums[i-1] 利用visitted[i-1]=false;
②i > beginIndex&&nums[i]==nums[i-1], i>beginIndex说明是同一层里有重复的
③利用Hash(set或数组或map)

class Solution { Set<String> set = new HashSet<>(); public String[] permutation(String S) { int n = S.length(); char[] ch = S.toCharArray(); boolean[] visited = new boolean[ch.length]; dfs(ch, 0, visited, new StringBuilder()); String[] ans = new String[set.size()]; int i = 0; for(String s : set){ ans[i++] = s; } return ans; } public void dfs(char[] ch, int depth, boolean[] visited, StringBuilder str){ if(depth == ch.length){ set.add(str.toString()); } for(int i = 0 ;i < ch.length;i++){ if(visited[i]) continue; visited[i] = true; str.append(ch[i]); dfs(ch, depth + 1, visited, str); str.replace(str.length() - 1, str.length(), ""); visited[i] = false; } } }

__EOF__

本文作者Younger
本文链接https://www.cnblogs.com/youngerwb/p/16342902.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   YoungerWb  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示