LeetCode_771

问题:

给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a""A"是不同类型的石头。

解析:

    本题是简单的搜索,最容易想到的是暴力求解,将S中每个字母和J中的做比较:

public int numJewelsInStones(String J, String S) {
		char a[]=J.toCharArray();
		int count=0;
		for(int i=0;i<S.length();i++)
		{
			for(int j=0;j<J.length();j++)
			{
				if(S.charAt(i)==a[j])
				{
					count++;
					break;
				}
			}
		}
		return count;
    }

    但是提交的记录中用时最短的程序使用了计数排序这个方法:定义一个数组,长度为J字符串中可能出现的字符的数量,将字符的值作为数组索引,若J字符中存在某个字符,则这个字符对应的数组的值为1,不存在即为0。这种方法牺牲了空间换来了时间:

public int numJewelsInStones(String J, String S) {
        int result = 0;
        char[] s = new char[128];
        for (char c : S.toCharArray()) {
            s[c]++;
        }
        for (char j : J.toCharArray()) {
            result += s[j];
        }
        return result;
    }

猜你喜欢

转载自blog.csdn.net/q_m_x_d_d_/article/details/81041847
今日推荐