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<String> res = new ArrayList<String>();
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<String> set = new HashSet<String>();
numTilePossibilities(chs,s,set);
return cnt;
}
public void numTilePossibilities(char[] chs,StringBuilder s,HashSet<String> 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
,则该节点被称之为「不足节点」,需要被删除。请你删除所有不足节点,并返回生成的二叉树的根。
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;
}