820. 单词的压缩编码
class Solution {
public int minimumLengthEncoding(String[] words) {
Set<String> good = new HashSet(Arrays.asList(words));
for (String word: words) {
for (int k = 1; k < word.length(); ++k)
good.remove(word.substring(k));
}
int ans = 0;
for (String word: good)
ans += word.length() + 1;
return ans;
}
}
Arrays.asList():该方法是将数组转化为list。
- 该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean)
- 该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新
- 不支持add和remove方法
class Solution {
public int minimumLengthEncoding(String[] words) {
int N = words.length;
Comparator<String> cmp = (s1, s2) -> {
int N1 = s1.length();
int N2 = s2.length();
for (int i = 0; i < Math.min(N1, N2); i++) {
char c1 = s1.charAt(N1 - 1 - i);
char c2 = s2.charAt(N2 - 1 - i);
int c = Character.compare(c1, c2);
if (c != 0) {
return c;
}
}
return Integer.compare(N1, N2);
};
// 逆序字典序排序
Arrays.sort(words, cmp);
int res = 0;
for (int i = 0; i < N; i++) {
if (i+1 < N && words[i+1].endsWith(words[i])) {
// 当前单词是下一个单词的后缀,丢弃
} else {
res += words[i].length() + 1; // 单词加上一个 '#' 的长度
}
}
return res;
}
}
面试题30. 包含min函数的栈
class MinStack {
Stack<Integer> A, B;
public MinStack() {
A = new Stack<>();
B = new Stack<>();
}
public void push(int x) {
A.add(x);
if(B.empty() || B.peek() >= x)
B.add(x);
}
public void pop() {
if(A.pop().equals(B.peek()))
B.pop();
}
public int top() {
return A.peek();
}
public int min() {
return B.peek();
}
}
class MinStack {
private Node head;
public MinStack() {
}
public void push(int x) {
if (head == null)
head = new Node(x, x, null);
else
head = new Node(x, Math.min(head.min, x), head);
}
public void pop() {
head = head.next;
}
public int top() {
return head.val;
}
public int min() {
return head.min;
}
private class Node {
int val;
int min;
Node next;
public Node(int val, int min, Node next) {
this.val = val;
this.min = min;
this.next = next;
}
}
}
面试题55 - II. 平衡二叉树
class Solution {
public boolean isBalanced(TreeNode root) {
if(root==null){
return true;
}
if(Math.abs(MaxDepth(root.left)-MaxDepth(root.right))>1){
return false;
}
return isBalanced(root.left)&&isBalanced(root.right);
}
public int MaxDepth(TreeNode root){
return root==null?0:Math.max(MaxDepth(root.left),MaxDepth(root.right))+1;
}
}
你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步