周赛140
- 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;
}
- 活字印刷
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;
}
- 根到叶路径上的不足节点
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;
}
- 不同字符的最小子序列
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();
}