给定字符串J
代表石头中宝石的类型,和字符串 S
代表你拥有的石头。 S
中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
J
中的字母不重复,J
和 S
中的所有字符都是字母。字母区分大小写,因此"a"
和"A"
是不同类型的石头。
示例 1:
输入: J = "aA", S = "aAAbbbb" 输出: 3
示例 2:
输入: J = "z", S = "ZZ" 输出: 0
注意:
S
和J
最多含有50个字母。-
J
中的字符不重复。
c语言
#include<stdio.h>
#include<string.h>
int numJewelsInStones(char* J, char* S) {
int list['z'-'A'+1]={0}, len_J=strlen(J), len_S=strlen(S), sum=0,i = 0;
for(i=0;i<len_S;i++)
list[S[i]-'A']++;
for(i=0;i<len_J;i++)
sum+=list[J[i]-'A'];
return sum;
}
int main(){
//char j[] = "aA";
//char s[] = "aAAbbbb";
char j[] = "z";
char s[] = "ZZ";
printf("%d\n",numJewelsInStones(j,s));
return 0;
}
#include<stdio.h>
#include<string.h>
//finished in 1ms
int numJewelsInStones(char* J, char* S) {
int list['z'-'A'+1]={0},sum=0,i=0;
while(S[i]!='\0'){
list[S[i]-'A']++;
i++;
}
i = 0;
while(J[i]!='\0'){
sum+=list[J[i]-'A'];
i++;
}
return sum;
}
int main(){
char j[] = "aA";
char s[] = "aAAbbbb";
//char j[] = "z";
//char s[] = "ZZ";
printf("%d\n",numJewelsInStones(j,s));
return 0;
}
Java
public class Test1 {
public static void main(String[] args) {
String j= "aA";
String s = "aAAbbbb";
System.out.println(num(j,s));
}
public static int num(String J,String S){
char sArr[] = S.toCharArray();
char jArr[] = J.toCharArray();
int list[] = new int['z'-'A'];
int sum = 0;
for(char s:sArr){
list[s-'A']++;
}
for(char j:jArr){
sum += list[j-'A'];
}
return sum;
}
//模式匹配
public static int num1(String J,String S){
return S.replaceAll("[^"+J+"]","").length();
}
}