美文网首页
771. Jewels and Stones

771. Jewels and Stones

作者: BadGirl_TONG | 来源:发表于2018-02-02 15:20 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/lhgqzxtx.html