zoukankan      html  css  js  c++  java
  • 916. Word Subsets

    package LeetCode_916
    
    /**
     * 916. Word Subsets
     *https://leetcode.com/problems/word-subsets/description/
     *
     * 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 B, b 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"]
    
    Note:
    1 <= A.length, B.length <= 10000
    1 <= A[i].length, B[i].length <= 10
    A[i] and B[i] consist only of lowercase letters.
    All words in A[i] are unique: there isn't i != j with A[i] == A[j].
     * */
    class Solution {
        fun wordSubsets(A: Array<String>, B: Array<String>): List<String> {
            val result = ArrayList<String>()
            //for example B:"e","oo"
            //maxFrequency: 0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,
            val maxFrequency = IntArray(26)
            for (str in B) {
                val strFrequency = countFrequency(str)
                for (i in 0 until 26) {
                    maxFrequency[i] = Math.max(maxFrequency[i], strFrequency[i])
                }
            }
    
            for (word in A) {
                val strFrequency = countFrequency(word)
                //B:"e","oo"
                //if the word in set A that this word's letter e's occur frequency is not less than 1 and
                //o's occur frequency not less than 2, than add to result
                for (i in 0 until 26) {
                    if (strFrequency[i] < maxFrequency[i]) {
                        break
                    }
                    if (i == 25) {
                        result.add(word)
                    }
                }
            }
            //println(result)
            return result
        }
    
        private fun countFrequency(word: String): IntArray {
            val result = IntArray(26)
            for (c in word) {
                result[c - 'a']++
            }
            return result
        }
    }
  • 相关阅读:
    Fizz Buzz 问题
    旋转字符串
    合并排序数组
    尾部的零
    A + B 问题
    CentOS6.x安装RabbitMQ
    MySql游标
    MySql存储过程
    找出n个自然数(1,2,3,……,n)中取r个数的组合
    正则表达式
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13200671.html
Copyright © 2011-2022 走看看