算法题-leetcode-771 Jewels and Stones

771:Jewels and Stones宝石问题

题目

You're given strings J representing the types of stones that are jewels, and S representing the stones you have.  Each character in Sis a type of stone you have.  You want to know how many of the stones you have are also jewels.

The letters in J are guaranteed distinct, and all characters in J and S are letters. Letters are case sensitive, so "a" is considered a different type of stone from "A".

Input: J = "aA", S = "aAAbbbb"
Output: 3

分析:

判断字符串S中有多少个字符包含在J中。

解法1:

拿到题目的第一反应。虽然我也搞不懂为什么要费劲儿的把字符串转化为数组再进行for循环,明明可以直接用string数组进行比较啊

时间复杂度:o(s*j);

空间复杂度:o(1);

值得一提:(1) char [ ] jewels=J.toChatArray();可以将string类型转化为char类型的数组

                   (2)字符串求长度:J。length();   数组求长度:jewels.length.

class Solution {
    public int numJewelsInStones(String J, String S) {
        char[] jewels=J.toCharArray();
        char[] stones=S.toCharArray();
        int count=0;
        for(int j=0;j<stones.length;j++){
            for(int i=0;i<jewels.length;i++){
            if(stones[j]==(jewels[i])){
                count++;
                break;
            }
          }
        }
        return count;
    }
}

解法2:

不看根本想不到系列,,先将J中的字符当做key存起来,再遍历字符串S,看是否包含了这些key。原来for循环还能那样简写,,,

时间复杂度:o(j+s);

空间复杂度:o(j);

class Solution {
    public int numJewelsInStones(String J, String S) {
        int count=0;
        Set hashJ=new HashSet();
        for(char j: J.toCharArray())
            hashJ.add(j);
        for(char s:S.toCharArray())
            if(hashJ.contains(s))
                count++;               
        return count;
    }        
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值