Leetcode 771 宝石与石头

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

猜你喜欢

转载自blog.csdn.net/czj1992czj/article/details/79891423