import java.util.*; /** * NC190 字符串的全部子序列 * @author d3y1 */ public class Solution { // 哈希 private HashSet<String> set = new HashSet<>(); /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串一维数组 */ public String[] generatePermutation (String s) { return solution1(s); // return solution2(s); } /** * 递归 + 哈希 * @param s * @return */ private String[] solution1(String s){ dfs(s, 0, ""); ArrayList<String> list = new ArrayList<>(set); return list.toArray(new String[list.size()]); } /** * 递归 * @param s * @param idx * @param sub */ private void dfs(String s, int idx, String sub){ set.add(sub); if(idx == s.length()){ return; } // 从左往右 依次选择 for(int i=idx; i<s.length(); i++){ dfs(s, i+1, sub+s.charAt(i)); } } /** * 递归 + 哈希 * @param s * @return */ private String[] solution2(String s){ operate(s, 0, ""); ArrayList<String> list = new ArrayList<>(set); return list.toArray(new String[list.size()]); } /** * 递归 * @param s * @param idx * @param sub */ private void operate(String s, int idx, String sub){ set.add(sub); if(idx == s.length()){ return; } // 选择 operate(s, idx+1, sub+s.charAt(idx)); // 不选 operate(s, idx+1, sub); } }