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

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  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()

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

你可能感兴趣的:(算法分析,C++,编程语言)