leetcode初级算法 —— 1.2 宝石与石头 C++

本文解析LeetCode初级算法题目“宝石与石头”,介绍如何使用C++解决该问题,包括字符串查找、删除方法及unordered_set优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

leetcode初级算法 —— 宝石与石头 C++

欢迎观看本博客

  您好! 这是我第二次在 力扣(leetcode) 上练习算法。如有疏漏与不足之处还请多多指教。

题目详情

  给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
  J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。

实例:

  输入: J = “aA”, S = “aAAbbbb”
  输出: 3

代码:

class Solution {
public:
    int numJewelsInStones(string J, string S)
     {
        int count = 0; 		 //计数器
        int index= 0;		 //字符位置
       for(auto str : J)
       {
           while((index= S.find(str)) != -1)
           {
           	 S.erase(index, 1);
           	 count ++;
        	}
       }
        return count;
    }
};

优化代码:

class Solution {
public:
    int numJewelsInStones(string J, string S)
     {
        int count = 0; //计数器
        unordered_set <char> strJ;
        for(auto j : J) strJ.insert(j);
        for(auto s : S) if(strJ.count(s)) count++;
        return count;
    }
};

总结:
  此次测试题目比较简单,主要考察对语言的掌握,其中用到字符串查找方法find() 与 字符串删除方法erase() 以及 字符串遍历法 for(auro str : J) 注:此方法为C11 中添加。
  新代码中使用关联容器 unordered_set 并使用其中计数方法count()

寄语:
  天行健,君子以自强不息,
  地势坤,君子以厚德载物。
                    ——周文王姬昌 《周易》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值