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 Sis 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".

Example 1:

Input:J = "aA", S = "aAAbbbb"Output:3

Example 2:

Input:J = "z", S = "ZZ"Output:0

Note:

S and J will consist of letters and have length at most 50.

The characters in J are distinct.

Solution:(错误解法)

https://discuss.leetcode.com/topic/118697/java-o-s-j-time-and-o-1-space

public int numJewelsInStones(String J, String S) {

        if(J.length() == 0 || S.length() == 0)

            return 0;


        // Using helper array for O(1) loopkup when traversing S

        int[] jewels = new int[58];

        for(int i=0; i

            jewels[(J.charAt(i) - 'A')] = 1;

        }


        int result = 0;

        for(int i=0; i

            if(jewels[(S.charAt(i) - 'A')] == 1) {

                result++;

            }

        }


        return result;

    }

}

Why an array of length 58? Two reasons

We need to consider both upper-case and lower-case characters

ASCII of 'z' - 'A' is 58. (https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html)

Thanks to @thaliahard for pointing out the reduction in array size.

你可能感兴趣的:(771. Jewels and Stones)