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.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容