• LeetCode 916. Word Subsets


    原题链接在这里:https://leetcode.com/problems/word-subsets/

    题目:

    We are given two arrays A and B of words.  Each word is a string of lowercase letters.

    Now, say that word b is a subset of word a if every letter in b occurs in a, including multiplicity.  For example, "wrr" is a subset of "warrior", but is not a subset of "world".

    Now say a word a from A is universal if for every b in Bb is a subset of a

    Return a list of all universal words in A.  You can return the words in any order.

    Example 1:

    Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["e","o"]
    Output: ["facebook","google","leetcode"]
    

    Example 2:

    Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["l","e"]
    Output: ["apple","google","leetcode"]
    

    Example 3:

    Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["e","oo"]
    Output: ["facebook","google"]
    

    Example 4:

    Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["lo","eo"]
    Output: ["google","leetcode"]
    

    Example 5:

    Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["ec","oc","ceo"]
    Output: ["facebook","leetcode"]

    Note:

    1. 1 <= A.length, B.length <= 10000
    2. 1 <= A[i].length, B[i].length <= 10
    3. A[i] and B[i] consist only of lowercase letters.
    4. All words in A[i] are unique: there isn't i != j with A[i] == A[j].

    题解:

    String a in A, if it is universal for every b in B, it must cover all the letters and max corresponding multiplicity in B.

    Thus construct a map to maintain all letters and max corresponding multiplicity in B.

    Then for each A, if it could cover this map, then add it to the res.

    Time Complexity: O(m*n + p*q). m = A.length. n = average length of string in A. p = B.length. q = average length of string in B.

    Space: O(1).

    AC Java: 

     1 class Solution {
     2     public List<String> wordSubsets(String[] A, String[] B) {
     3         List<String> res = new ArrayList<>();
     4         if(A == null || A.length == 0){
     5             return res;
     6         }
     7         
     8         if(B == null || B.length == 0){
     9             return Arrays.asList(A);
    10         }
    11         
    12         int [] map = new int[26];
    13         for(String b : B){
    14             int [] bMap = new int[26];
    15             for(char c : b.toCharArray()){
    16                 bMap[c - 'a']++;
    17             }
    18             
    19             for(int i = 0; i<26; i++){
    20                 map[i] = Math.max(map[i], bMap[i]);
    21             }
    22         }
    23         
    24         for(String a : A){
    25             int [] aMap = new int[26];
    26             for(char c : a.toCharArray()){
    27                 aMap[c-'a']++;
    28             }
    29             
    30             boolean isNotSubSet = false;
    31             for(int i = 0; i<26; i++){
    32                 if(aMap[i] < map[i]){
    33                     isNotSubSet = true;
    34                     break;
    35                 }
    36             }
    37             
    38             if(!isNotSubSet){
    39                 res.add(a);
    40             }
    41         }
    42         
    43         return res;
    44     }
    45 }
  • 相关阅读:
    数据结构 AVL树
    数据结构 快速排序
    Mybatis 传递多个参数
    数据结构 二叉搜索树
    Java 多线程 ReadWriteLock
    Java 基础 集合框架
    SourceTree安装跳过注册
    【前端部署】阿里云 windows2019服务器用node部署静态项目
    【node开发】node简易服务器一分钟搞定
    【node开发】node.js编写一个接口
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11993123.html
Copyright © 2020-2023  润新知