LeetCode(一)之java集合重复元素问题

问题:你得到的字符串J代表的是宝石的类型,S代表你拥有的石头。S中的每个字符都是你拥有的一种石头。你想知道你有多少石头也是珠宝?。

J中的字母是有保证的,J和S中的字符都是字母。字母是区分大小写的,所以“a”与“A”被视为不同的石头类型。
例如:
J:aA S:aaAAbbbb
输出为:3
J:z S:ZZ
输出为:0
注意:
1. J和S为字符串且字符串长度不超过50
2. J中元素不能有重复
方法一:(不是一个好方法,有好多需要改进的地方)
考虑到传统方法,若先把字符串转为数组,然后进行双层遍历。
public class Distinct{
public int numJewelsInStones(String J, String S){
int count=0;
for(String j:J.toCharArray())
for(String s:S.toCharArray())
{ if (j==s)
count++;
}
return count;
}
}
方法二:
本题的实质是J中是否有重复元素且J中元素是不是在S中出现和出现的次数。这时可以用到java中Set接口,它表示无序且不重复的集合。Set接口下有HashSet和TreeSet(红黑树)方法。本题可以用HashSet,当用add()添加元素时,用HashCode和equals方法来比较。先比较哈希值是否相同,如果相同,继续比较equals方法,如果相同不能加入,如果不同可以加入。
public class Distinct{
public int numJewelsInStones(String J, String S){
Set sets=new HashSet();
int count=0;
for(String j:J.toCharArray())
{ sets.add(j);
for(String s:S.toCharArray())
if(sets.contains(s))
count++;
}
return count;
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值