题解 | #字符串的全部子序列#

字符串的全部子序列

https://www.nowcoder.com/practice/92e6247998294f2c933906fdedbc6e6a

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);
    }
}

全部评论

相关推荐

看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
你找工作的时候用AI吗?
点赞 评论 收藏
分享
ZywOo_求职版:谁问你了....
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务