leetcode面试题 08.08. 有重复字符串的排列组合(回溯)
2020-07-31 16:00
1361 查看
有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。
示例1:
输入:S = “qqe”
输出:[“eqq”,“qeq”,“qqe”]
示例2:
输入:S = “ab”
输出:[“ab”, “ba”]
代码
class Solution { ArrayList<String> ans=new ArrayList<>(); public String[] permutation(String S) { Map<Character,Integer> map=new HashMap<>(); for(char c:S.toCharArray()) map.put(c,map.getOrDefault(c,0)+1);//记录字符及其出现的次数 per(map,new char[S.length()],0,S); return ans.toArray(new String[ans.size()]); } public void per( Map<Character,Integer> map,char[] temp,int loc,String S) { if(loc==S.length()) {//满足情况 ans.add(String.valueOf(temp)); return; } for(char c:map.keySet()) { if(map.get(c)<1) continue;//这个字符没有余量了 map.put(c,map.get(c)-1); temp[loc]=c; per(map, temp, loc+1,S); map.put(c,map.get(c)+1);//回溯 } } }
相关文章推荐
- 【Golang】LeetCode-剑指Offer-面试题48-最长不含重复字符的子字符串
- [Leetcode 每日精选] 面试题46. 把数字翻译成字符串
- LeetCode 剑指offer 面试题58 - II. 左旋转字符串 多种语言解法
- 剑指offer 面试题35扩展:删除字符串中所有重复出现的字符 (C++版)
- leetcode每日一题(1)——面试题01.06 字符串压缩
- LeetCode第3题--无重复的字符串
- LeetCode-37-Sudoku Solver, list转字符串join,回溯
- Python基础2 字符串必备操作语法及 面试题:输出字符串中重复的字符,统计字符串中字符出现次数
- 【c/c++面试题】查找重复且最长的字符串
- LeetCode 02. 两数相加(链表) 03.最大不重复的字符串
- 剑指Offer----面试题35:扩展----删除字符串中所有重复出现的字符 & 变位词
- 面试题:最长不含重复字符的子字符串
- python【力扣LeetCode算法题库】面试题 01.06-字符串压缩
- 【Java】面试题48:最长不含重复字符的子字符串
- leetcode:459重复的字符串(C++)
- leetcode【第十八周】以特定次数替换字符并计算最长重复字符串
- 【每日面试题】给定一个字符串,求出其最长的重复子串
- [面试题]去除字符串中相邻两个字符的重复
- 字符串的排列组合(组合需无重复字母)
- 每天一道LeetCode-----寻找给定字符串中重复出现的子串