写在前面
今天的这道题,《宝石与石头》,是关于字符串结构的一道题。
如果你感兴趣,可以一起来看一下具体的题目。
题目解读
根据题目的标题来看,其实是很难看出来是一个什么样的题目。
但是从题目的描述来看,我们就能很容易的看出这道题到底想要干些什么了。
大概是这样,有两个字符串,分别是jewels、stones两个字符串。
从stones字符串所有字符中,筛选出jewels字符串中的字符数量。
并且保证jewels字符串中不存在重复字符的情况。
如此的话,我们就可以通过遍历两个字符串来解出这道题来。
但是我这第一时间想到的不是这个方法,而是通过替换方法来解决,先通过替换方法将含有的字符删掉,随后再比对替换前后的长度差距。
最终得到正确的结果。
下面就一起来看一下代码的编写吧。
代码实现
本次执行代码如下,大家可以自行参考一下。
public class Solution { public static void main(String[] args) { Solution solution = new Solution(); System.out.println(solution.numJewelsInStones("aA", "aAAbbbb")); } public int numJewelsInStones(String jewels, String stones) { int result = 0; for (int i = 0; i < jewels.length(); i++) { int length = stones.length(); stones = stones.replaceAll(String.valueOf(jewels.charAt(i)), ""); result = result + length - stones.length(); } return result; } }
代码执行结果
又是这么低的排名,真是……
其他思路
直接双重循环遍历解决的话,竟然更快,应该就是替换方法导致的效率太慢。
public int numJewelsInStones(String jewels, String stones) { int result = 0; for (int i = 0; i < jewels.length(); i++) { for (int j = 0; j < stones.length(); j++) { if(stones.charAt(j) == jewels.charAt(i)){ result++; } } } return result; }
总结
本道题,主要考察字符串的熟练掌握程度,一般针对字符串都是遍历字符,比对字符等等的操作,只要掌握这些,解出此题易如反掌。