#LeetCode:383. Ransom Note

灆洢 2020-05-04 09:51:29

此題要找出在勒索信上所使用到的字是否都可以從雜誌上剪下來貼成。

對兩邊的字串建立一個字數與數量的 Map,接著比較從勒索信字串所建立的 Map,是否每個字皆在透過雜誌字串所建立的 Map 中,且數量皆形成小於或等於的關係即可。

Kotlin(252ms)

/*******************************************************
 * LeetCode 383. Ransom Note                           *
 * Author: Maplewing [at] knightzone.studio            *
 * Version: 2020/05/03                                 *
 *******************************************************/
class Solution {
    fun getLetterCountMap(s: String): Map<Char, Int> = 
            s.groupingBy({ it }).eachCount()

    fun canConstruct(ransomNote: String, magazine: String): Boolean {
        val magazineLetterCountMap = getLetterCountMap(magazine)
        val ransomNoteLetterCountMap = getLetterCountMap(ransomNote)

        for ((c, count) in ransomNoteLetterCountMap) {
            if (!magazineLetterCountMap.containsKey(c)) return false

            val magazineCount = magazineLetterCountMap[c] ?: 0
            if (count > magazineCount) return false
        }

        return true
    }
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料