771:Jewels and Stones宝石问题
题目:
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"
.
Input: J = "aA", S = "aAAbbbb" Output: 3
分析:
判断字符串S中有多少个字符包含在J中。
解法1:
拿到题目的第一反应。虽然我也搞不懂为什么要费劲儿的把字符串转化为数组再进行for循环,明明可以直接用string数组进行比较啊
时间复杂度:o(s*j);
空间复杂度:o(1);
值得一提:(1) char [ ] jewels=J.toChatArray();可以将string类型转化为char类型的数组
(2)字符串求长度:J。length(); 数组求长度:jewels.length.
class Solution {
public int numJewelsInStones(String J, String S) {
char[] jewels=J.toCharArray();
char[] stones=S.toCharArray();
int count=0;
for(int j=0;j<stones.length;j++){
for(int i=0;i<jewels.length;i++){
if(stones[j]==(jewels[i])){
count++;
break;
}
}
}
return count;
}
}
解法2:
不看根本想不到系列,,先将J中的字符当做key存起来,再遍历字符串S,看是否包含了这些key。原来for循环还能那样简写,,,
时间复杂度:o(j+s);
空间复杂度:o(j);
class Solution {
public int numJewelsInStones(String J, String S) {
int count=0;
Set hashJ=new HashSet();
for(char j: J.toCharArray())
hashJ.add(j);
for(char s:S.toCharArray())
if(hashJ.contains(s))
count++;
return count;
}
}