zoukankan      html  css  js  c++  java
  • 【leetcode】1255. Maximum Score Words Formed by Letters

    题目如下:

    Given a list of words, list of  single letters (might be repeating) and score of every character.

    Return the maximum score of any valid set of words formed by using the given letters (words[i] cannot be used two or more times).

    It is not necessary to use all characters in letters and each letter can only be used once. Score of letters 'a''b''c', ... ,'z' is given by score[0]score[1], ... , score[25] respectively.

    Example 1:

    Input: words = ["dog","cat","dad","good"], letters = ["a","a","c","d","d","d","g","o","o"], 
    score = [1,0,9,5,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0] Output: 23 Explanation: Score a=1, c=9, d=5, g=3, o=2 Given letters, we can form the words "dad" (5+1+5) and "good" (3+2+2+5) with a score of 23. Words "dad" and "dog" only get a score of 21.

    Example 2:

    Input: words = ["xxxz","ax","bx","cx"], letters = ["z","a","b","c","x","x","x"], 
    score = [4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,10] Output: 27 Explanation: Score a=4, b=4, c=4, x=5, z=10 Given letters, we can form the words "ax" (4+5), "bx" (4+5) and "cx" (4+5) with a score of 27. Word "xxxz" only get a score of 25.

    Example 3:

    Input: words = ["leetcode"], letters = ["l","e","t","c","o","d"], score = [0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0]
    Output: 0
    Explanation:
    Letter "e" can only be used once. 

    Constraints:

    • 1 <= words.length <= 14
    • 1 <= words[i].length <= 15
    • 1 <= letters.length <= 100
    • letters[i].length == 1
    • score.length == 26
    • 0 <= score[i] <= 10
    • words[i]letters[i] contains only lower case English letters.

    解题思路:这题也能算hard级别?words.length 最大才14,那么总共有2^14次方种组合,全列举出来求最大值即可。

    代码如下:

    class Solution(object):
        def maxScoreWords(self, words, letters, score):
            """
            :type words: List[str]
            :type letters: List[str]
            :type score: List[int]
            :rtype: int
            """
            def checkValid(string,dic):
                for i in string:
                    if i not in dic or string.count(i) > dic[i]:
                        return False
                return True
            def calc(string,dic):
                uniq = set(list(string))
                count = 0
                for i in uniq:
                    count += string.count(i) * score[ord(i) - ord('a')]
                return count
    
            dic = {}
            for i in letters:
                dic[i] = dic.setdefault(i,0) + 1
            queue = []
            for i in range(len(words)):
                if checkValid(words[i],dic):
                    queue.append((i,words[i]))
            res = 0
            while len(queue) > 0:
                inx,word = queue.pop(0)
                res = max(res,calc(word,dic))
                for i in range(inx+1,len(words)):
                    if checkValid(word + words[i],dic):
                        queue.append((i,word + words[i]))
            return res
  • 相关阅读:
    Linux块设备IO子系统(二) _页高速缓存
    Linux块设备IO子系统(一) _驱动模型
    Linux usb子系统(二) _usb-skeleton.c精析
    Linux usb子系统(一) _写一个usb鼠标驱动
    Linux i2c子系统(四) _从i2c-s3c24xx.c看i2c控制器驱动的编写
    Linux i2c子系统(三) _解决probe无法执行
    Linux i2c子系统(二) _通过i2c-dev.c访问设备的方法
    Linux i2c子系统(一) _动手写一个i2c设备驱动
    从0移植uboot(六) _实现网络功能
    从0移植uboot(五) _实现串口输出
  • 原文地址:https://www.cnblogs.com/seyjs/p/11841269.html
Copyright © 2011-2022 走看看