• [Swift]LeetCode1255. 得分最高的单词集合 | Maximum Score Words Formed by Letters


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(let_us_code)
    ➤博主域名:https://www.zengqiang.org
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/11831495.html
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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.

    你将会得到一份单词表 words,一个字母表 letters (可能会有重复字母),以及每个字母对应的得分情况表 score

    请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能够由 letters 里的字母拼写出的 任意 属于 words 单词子集中,分数最高的单词集合的得分。

    单词拼写游戏的规则概述如下:

    • 玩家需要用字母表 letters 里的字母来拼写单词表 words 中的单词。
    • 可以只使用字母表 letters 中的部分字母,但是每个字母最多被使用一次。
    • 单词表 words 中每个单词只能计分(使用)一次。
    • 根据字母得分情况表score,字母 'a''b''c', ... , 'z' 对应的得分分别为 score[0]score[1], ..., score[25]
    • 本场游戏的「得分」是指:玩家所拼写出的单词集合里包含的所有字母的得分之和。 

    示例 1:

    输入: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]
    输出:23
    解释:
    字母得分为  a=1, c=9, d=5, g=3, o=2
    使用给定的字母表 letters,我们可以拼写单词 "dad" (5+1+5)和 "good" (3+2+2+5),得分为 23 。
    而单词 "dad" 和 "dog" 只能得到 21 分。

    示例 2:

    输入: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]
    输出:27
    解释:
    字母得分为  a=4, b=4, c=4, x=5, z=10
    使用给定的字母表 letters,我们可以组成单词 "ax" (4+5), "bx" (4+5) 和 "cx" (4+5) ,总得分为 27 。
    单词 "xxxz" 的得分仅为 25 。

    示例 3:

    输入: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]
    输出:0
    解释:
    字母 "e" 在字母表 letters 中只出现了一次,所以无法组成单词表 words 中的单词。

    提示:

    • 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] 只包含小写的英文字母。

    Runtime: 24 ms
    Memory Usage: 21.4 MB
     1 class Solution {
     2     func maxScoreWords(_ words: [String], _ letters: [Character], _ score: [Int]) -> Int {
     3         if words.isEmpty || words.count == 0 || letters.isEmpty || letters.count == 0 || score.isEmpty || score.count == 0
     4         {
     5             return 0
     6         }
     7         var count:[Int] = [Int](repeating: 0, count: score.count)
     8         for ch in letters
     9         {
    10             count[Int(ch.asciiValue! - 97)] += 1
    11         }
    12         return backtrack(words, &count, score, 0)
    13     }
    14     
    15     func backtrack(_ words: [String], _ count: inout [Int], _ score: [Int],_ index:Int) -> Int
    16     {
    17         var maxNum:Int = 0
    18         for i in index..<words.count
    19         {
    20             var res:Int = 0
    21             var isValid:Bool = true
    22             for ch in words[i]
    23             {
    24                 count[Int(ch.asciiValue! - 97)] -= 1
    25                 res += score[Int(ch.asciiValue! - 97)]
    26                 if count[Int(ch.asciiValue! - 97)] < 0
    27                 {
    28                     isValid = false
    29                 }
    30             }
    31             if isValid
    32             {
    33                 res += backtrack(words, &count, score, i + 1)
    34                 maxNum = max(res, maxNum)
    35             }
    36             for ch in words[i]
    37             {
    38                 count[Int(ch.asciiValue! - 97)] += 1
    39                 res = 0
    40             }
    41         }
    42         return maxNum
    43     }
    44 }
  • 相关阅读:
    iOS 10 的一个重要更新-用 UIViewPropertyAnimator 编写动画
    iOS 10 的一个重要更新-线程竞态检测工具 Thread Sanitizer
    iOS 10 的一个重要更新-开发 iMessage 的第三方插件
    状态栏白色
    iOS 对 HTTPS 证书链的验证
    Xcode8 带来的新特性和坑
    升级cocoapods1.1.1版本
    (这也不是,那也不是,怎么办?)无论何时坚持自己的原则,当选准了目标,就不放弃,做最好的自己。我们必须要有一定的看法,正确的做法;有时,我们无法避免他人在旁的批评或劝告,但我们是无法取悦每个人的,否则将失去了方向,迷失了自己。
    笑话集锦(1)
    最感动的一首现代诗(转)(修正了一点翻译)
  • 原文地址:https://www.cnblogs.com/strengthen/p/11831495.html
Copyright © 2020-2023  润新知