首页 > 其他分享 >LeetCode 383. 赎金信

LeetCode 383. 赎金信

时间:2023-05-07 20:45:49浏览次数:43  
标签:ransomNote map return range record magazine 383 赎金 LeetCode

题目链接: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
}

标签:ransomNote,map,return,range,record,magazine,383,赎金,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17380098.html

相关文章

  • LeetCode 516. 最长回文子序列
    classSolution{public:intf[1010][1010];//f[i][j]表示s[i~j]之间的最长序列intINF=0x3f3f3f3f;intlongestPalindromeSubseq(strings){intn=s.size();s=''+s;for(intlen=1;len<=n;len++)for(inti=1;i......
  • LeetCode 202. 快乐数
    题目链接:LeetCode202.快乐数题意:本题是让我们判断一个数是否是快乐数,题干中给出了快乐数的条件。解题思路:方法一:在题干中指出,如果一个数不是快乐数的话,那么它的各个位上的数字的平方和会无限循环,始终变不到1,也就是说求和的过程中,sum会重复出现,因此我们抓住这一关键特征,判......
  • LeetCode 349. 两个数组的交集
    题目链接:LeetCode349.两个数组的交集题意:本题题意是让我们找出两个数组中的交集,注意交集中不能出现重复元素解题思路:思路比较常规,先遍历数组num1,对于每个首次出现的数字,对应位置上的数值+1,再遍历数组num2,判断当前数字是否在num1中出现,如果出现,就加入到结果集中完整代码如......
  • LeetCode 242. 有效的字母异位词
    题目链接:LeetCode242.有效的字母异位词题意:本题是要判断两个字符串s和t,是否是字母异位词,所谓字母异位次就是如果s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。解题思路:首先我们很容易想到,最简单的思路就是先遍历一遍s字符串,统计出每个字母出现的次数......
  • Leetcode11~20题整理
    11.盛最多水的容器比较暴力的做法:classSolution{public:intmaxArea(vector<int>&h){vector<int>t;intn=h.size();intres=-1;for(inti=0;i<n;i++){for(intj=0;j<(int)t.size(......
  • LeetCode 134.加油站
    1.题目:在一条环路上有n 个加油站,其中第i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组gas和cost,如果你可以绕环路行驶一周,则返回......
  • 【二分查找】LeetCode 33. 搜索旋转排序数组思路
    题目链接33.搜索旋转排序数组思路思路都在注释里代码classSolution{publicintsearch(int[]nums,inttarget){intlen=nums.length;if(len==0){return-1;}intleft=0,right=len-1;//1.......
  • 【二分查找】LeetCode 528. 按权重随机选择
    题目链接528.按权重随机选择思路代码classSolution{privateint[]sum;publicSolution(int[]w){sum=newint[w.length+1];for(inti=1;i<sum.length;i++){sum[i]=sum[i-1]+w[i-1];}}p......
  • 【二分查找】LeetCode 69. x 的平方根
    题目链接69.x的平方根思路基本思路是在区间\([1,x/2]\)中使用二分查找(因为平方根必然小于\(x/2\)),只不过需要注意一些细节。因为使用的是闭区间查找,所以判断循环终止的条件为\(left\leqright\)。为了防止溢出,使用mid=(right-left)/2+left和mid==x/mi......
  • 【二分查找】LeetCode 540. 有序数组中的单一元素
    题目链接540.有序数组中的单一元素思路假如不存在单个的元素,那么在奇数位置上总是成对元素的第一个元素,偶数位置上总是成对元素的第二个元素,但是如果加入了单个元素呢?我们可以看到在单个元素的左边这个特点没有变化,但是在单个元素的右边,奇数位置上总是成对元素的第二个元素,偶......