持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情
写在前面
今天的这道题,《宝石与石头》,是关于字符串结构的一道题。
如果你感兴趣,可以一起来看一下具体的题目。
题目解读
根据题目的标题来看,其实是很难看出来是一个什么样的题目。
但是从题目的描述来看,我们就能很容易的看出这道题到底想要干些什么了。
大概是这样,有两个字符串,分别是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;
}
总结
本道题,主要考察字符串的熟练掌握程度,一般针对字符串都是遍历字符,比对字符等等的操作,只要掌握这些,解出此题易如反掌。