力扣---2020.3.28

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;
    }
}

你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步

发布了217 篇原创文章 · 获赞 268 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40722827/article/details/105168249