LeetCode140场周赛

 1078. Bigram 分词

给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 "first second third" 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。

对于每种这样的情况,将第三个词 "third" 添加到答案中,并返回答案。

 

示例 1:

输入:text = "alice is a good girl she is a good student", first = "a", second = "good"
输出:["girl","student"]

示例 2:

输入:text = "we will we will rock you", first = "we", second = "will"
输出:["we","rock"]
public String[] findOcurrences(String text, String first, String second) {
    String[] strs = text.split(" ");
    ArrayList res = new ArrayList();
    for(int i = 0;i < strs.length - 2;i++) {
        if(strs[i].equals(first) && strs[i+1].equals(second)) {
            res.add(strs[i+2]);
        }      	
    }
    String[] reStrings = new String[res.size()];
    for(int i = 0;i < res.size();i++) {
        reStrings[i] = res.get(i);
    }
    return reStrings;
}

 

1079. 活字印刷

你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i]。返回你可以印出的非空字母序列的数目。

示例 1:

输入:"AAB"
输出:8
解释:可能的序列为 "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"。

示例 2:

输入:"AAABBC"
输出:188
boolean[] flag;
public int cnt = 0;
public int numTilePossibilities(String tiles) {
    char[] chs = tiles.toCharArray();
    flag = new boolean[chs.length];
    StringBuilder s = new StringBuilder();
    HashSet set = new HashSet();
    numTilePossibilities(chs,s,set);
    return cnt;
}

public void numTilePossibilities(char[] chs,StringBuilder s,HashSet set) {
    if(s.length() == chs.length) {
        String string = s.toString();
        if(!set.contains(string)) {
            cnt++;
            set.add(string);
        }						
    }else {
        for(int i = 0;i < chs.length;i++) {
            if(!flag[i]) {					
                if(set.contains(s.append(chs[i]).toString())) {
                    s.deleteCharAt(s.length()-1);
                    continue;
                }						
                set.add(s.toString());
                cnt++;
                flag[i] = true;					
                numTilePossibilities(chs,s,set);
                s.deleteCharAt(s.length()-1);
                flag[i] = false;
            }
        }
    }
}

 

1080. 根到叶路径上的不足节点

给定一棵二叉树的根 root,请你考虑它所有 从根到叶的路径:从根到任何叶的路径。(所谓一个叶子节点,就是一个没有子节点的节点)

假如通过节点 node 的每种可能的 “根-叶” 路径上值的总和全都小于给定的 limit,则该节点被称之为「不足节点」,需要被删除。

请你删除所有不足节点,并返回生成的二叉树的根。

https://leetcode-cn.com/contest/weekly-contest-140/problems/insufficient-nodes-in-root-to-leaf-paths/

public TreeNode sufficientSubset(TreeNode root, int limit) {
	root = sufficientSubset(root,limit,0);
	return root;
}
public TreeNode sufficientSubset(TreeNode root, int limit,int preNum) {
	if(root == null)
		return null;
	if(root.left == null && root.right == null) {
		if(preNum + root.val < limit) {
			root = null;
			return null;
		}
	}else if(root.left != null || root.right != null) {
		root.left = sufficientSubset(root.left,limit,preNum + root.val);
		root.right = sufficientSubset(root.right,limit,preNum + root.val);
		if(root.left == null && root.right == null) {
			root = null;
			return null;
		}
	}
	return root;			
}

你可能感兴趣的:(LeetCode刷题之路)