LeetCode 383. 赎金信

发布时间 2023-05-07 20:39:00作者: 小星code

题目链接:LeetCode 383. 赎金信

题意:

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

解题思路:

  1. 首先利用map记录magazine 中所有出现的字母,key是单个字母,value是该字母出现的次数,

  2. 然后遍历ransomNote,检查当前字母在 magazine 中是否出现过,
    如果出现过,则map[] --
    如果没有出现过,则直接返回false

完整代码如下:

func canConstruct(ransomNote string, magazine string) bool {

    m:=make(map[rune]int)
    for _,v :=range magazine{
        m[v]++
    }
    for _,v:=range ransomNote{
        if m[v] > 0{
            m[v]--
            continue
        }else{
            return false
        }
    }
    return true
}

另外,使用map存储出现的所有字母,占用的空间比数组大,因此可以直接使用数组来表示,更加节省空间,

代码如下

func canConstruct(ransomNote string, magazine string) bool {
    record := make([]int, 26)
    for _, v := range magazine {   // 通过recode数据记录 magazine里各个字符出现次数
        record[v-'a']++
    }
    for _, v := range ransomNote { // 遍历ransomNote,在record里对应的字符个数做--操作
        record[v-'a']--
        if record[v-'a'] < 0 {     // 如果小于零说明ransomNote里出现的字符,magazine没有
            return false
        }
    }
    return true
}