给定字符串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(); } }