leetcode周赛补完计划(八)

周赛140

  1. Bigram 分词
public String[] findOcurrences(String text, String first, String second) {
    String[] str = text.split(" ");
    ArrayList<String> reslist = new ArrayList<>();
    for(int i = 0;i < str.length - 2;i++){
        if(str[i].equals(first)){
            if (str[i+1].equals(second)){
                reslist.add(str[i+2]);
            }
        }
    }
    String[] res = new String[reslist.size()];
    reslist.toArray(res);
    return res;
}
  1. 活字印刷
public int numTilePossibilities(String tiles) {
    int[] count = new int[26];
    Arrays.fill(count,0);
    for(int i = 0;i < tiles.length();i++){
        count[tiles.charAt(i) - 'A'] += 1;
    }
    return dfsCount(count);
}
public int dfsCount(int[] c){
    int res = 0;
    for(int i = 0;i < 26;i++){
        if(c[i] == 0)
            continue;
        res += 1;
        c[i] -= 1;

        res += dfsCount(c);
        c[i] += 1;
    }
    return res;
}
  1. 根到叶路径上的不足节点
public TreeNode sufficientSubset(TreeNode root, int limit) {
    boolean node = dfsPrune(root,0,limit);
    if(node){
        return null;
    }
    return root;
}

public boolean dfsPrune(TreeNode node,int sum,int limit) {
    if(node.left == null && node.right == null){
        return sum + node.val < limit;
    }

    boolean l = true;
    boolean r = true;

    if(node.left != null){
        l = dfsPrune(node.left,sum + node.val,limit);
    }

    if(node.right != null){
        r = dfsPrune(node.right,sum + node.val,limit);
    }

    if(l){
        node.left = null;
    }
    if(r){
        node.right = null;
    }

    return l && r;
}
  1. 不同字符的最小子序列
public String smallestSubsequence(String text) {
    Stack<Character> res = new Stack<>();
    for(int i = 0;i < text.length();i++){
        char temp = text.charAt(i);

        if(res.contains(temp)) {
            continue;
        }

        while (!res.empty()){
            if(res.peek() > temp && text.indexOf(res.peek(),i) != -1) {
                res.pop();
            } else {
                break;
            }
        }

        res.push(temp);
    }

    StringBuffer s = new StringBuffer();
    for(char c:res){
        s.append(c);
    }
    return s.toString();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值