zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    Linux下Redis集群环境的搭建
    redis: 6379端口下set值时出现 CLUSTERDOWN The cluster is down
    运行Maven工程总是报错:No goals have been specified for this build
    Centos6.5 配置Nginx开机自启动
    centos6.5无法访问网络
    centos6.5 nginx-1.8.0和ftp搭建图片服务器
    HTML中使图片居中显示
    使用InstallAnywhere工具打包Java_Web程序
    Android开发中Parcelable接口的使用方法
    Java8并行流使用注意事项
  • 原文地址:https://www.cnblogs.com/strengthen/p/11831495.html
Copyright © 2011-2022 走看看