[PHP in Leetcode 711] Jewels and Stones

开这个坑呢,主要是为了督促自己学习PHP,并且能尽早进入CTF的实战.虽然说PHP不算难(对于已经掌握一门语言的来说),但如果算法和函数都不熟悉的话啥也干不了.


题目

You’re given strings J representing the types of stones that are jewels, and S representing the stones you have. Each character in S is 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”.

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

范例:

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

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


思路

想法是朴素的:遍历示范字符串$J,对每个字母在字符串$S中查找并计数.

  • 为了遍历$J,这时候需要用到将字符串分割为数组的函数str_split.
    该函数的声明为:
    str_split(string,length)
    
    第一个参数是要分割的字符串,第二个是可选参数,是分割长度.
    返回一个Array型数组变量,可以用循环子i做遍历.
  • 遍历前要用到数组的长度来限制i,可以用srtlen()在分割之前求得字符串长度,也可用count()求数组的成员数,也就是字符串的长度.
  • $S中计数,需要用到substr_count()函数.该函数的作用是在一个字符串中计数和另一个字符串一样的子串.
    该函数的声明为:
    substr_count(string,substring,start,length)
    
    第一个参数是被查找的串,第二个是目标字串.第三个和第四个是可选参数,传入被查字串的起迄点和查找长度.
    注意:如果start+length>strlen会触发警告.
    返回子串在字符串中的数目.
    那接下来就很简单了.

代码

class Solution {

    /**
     * @param String $J
     * @param String $S
     * @return Integer
     */
    function numJewelsInStones($J, $S) {
        $datapan=str_split($J);
        $datalength=count($datapan);
        $res=0;
        for($i=0;$i<$datalength;$i++)
        {
           $res=substr_count($S,$datapan[$i])+$res;
        }
        return $res; 
    }
}

性能情况和总结

在这里插入图片描述
还不错?!不过看详细信息绝大多数都是这么写的.所以也没什么好说的.只能说还有很长的路要走.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值