力扣leetcode题目分析——宝石与石头

说明

我又来废话了,我发现力扣上面有些题是真的难,所以我挑了简单的开始做。我想有些题做不出来的话不要太纠结,可能是哪个知识点没学好,或者不会应用,补补知识点,实在不行再看看其他人的代码看能不能看懂。

运行环境

java语言

题目

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

示例1

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

示例2

输入: J = “z”, S = “ZZ”
输出: 0

注意:

  • S 和 J 最多含有50个字母。
  • J 中的字符不重复。

解题

我看了这道题后我以为考察的内容应该就是String中的方法了,可是我去看了这道题的标签,是“哈希表”。然后我就想既然如此,我就用集合来做,但是我发现集合做好像更麻烦,对于我来说。然后我还是选择自己的第一想法,用String来做,做完效果太差的话,再看看怎么用哈希表来做。
思路
我的思路就是把两个字符串拆开变为数组,然后用数组进行比较。遍历两个数组,如果我所拥有的石头跟宝石类型中有相同的,就加1。思路很简单。
把字符串拆成数组的话,有两个方法可供选择:
getBytes()和toCharArray(),不同的在于前者返回的是byte数组,后者返回的是char数组,这里我选择了第二个方法,把两个字符串拆成一个个的字符分别放在两个数组中。

废话不多说了,看代码:

class Solution {
    public int numJewelsInStones(String J, String S) {
        int num=0;
        char[] type=J.toCharArray();//把宝石类型字符串拆成字符数组
        char[] have=S.toCharArray();//把拥有的石头字符串拆成字符数组
        for(int i=0;i<type.length;i++){//通过循环比较
            for(int j=0;j<have.length;j++){
                if(type[i]==have[j]){
                    num++;//如果是宝石,数量加1
                }
            }
        }
        return num;
    }
}

结果
在这里插入图片描述
我确实想不到更好的解法了,但是我看了一下其他人做的,感觉最吸引我的应该就是用正则表达式的了,不过正则表达式我掌握的不太好,匹配会出错,这里介绍String中的用于正则表达式(Regular Expression)的方法。
1、matches(String regex)
一般用这个方法进行格式校验,参数是正则表达式
2、split(String regex)
这个方法是用来对字符串进行拆分

String str="a-b-c-d";
String[] value=str.split("-");//value数组中存的是a,b,c,d

3、如果要用正则表达式查找则需要用到两个类Pattern和Matcher
(1)利用Pattern类创建一个模式

Pattern pattern=Pattern.compile("\\d{3}");//这里的正则表达式就是数字出现3次的意思

(2)提供一个字符串

String str="123aab678bha090sdghfj"

(3)利用Pattern模式对象创建一个匹配器

Matcher matcher=pattern.matcher(str);

(4)找寻字符串中满足上述格式的字串

while(matcher.find()){
	//对选出来的字符串进行操作
	//找出来的应该是123,678,090
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值