题目链接:LeetCode 383. 赎金信
题意:
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
解题思路:
-
首先利用map记录magazine 中所有出现的字母,key是单个字母,value是该字母出现的次数,
-
然后遍历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
}
标签:ransomNote,map,return,range,record,magazine,383,赎金,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17380098.html