码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode #771. Jewels and Stones

时间:2018-02-26 21:54:08      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:different   作用   count   字符串   合并   iterable   模式   turn   out   

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


题意:给出两个字符串,一个是要匹配的模式串,一个是要匹配的字符串,模式串每个字母都是要匹配的字母,统计目标串中模式串各个字母出现的次数。

想法:最粗暴的想法就是去把模式串中的字母存成像Map或者List的结构数据,然后用的时候去依次扫,如果考虑找是O(1)的话就直接是O(N),(模式串长M,目标串N),如果找是O(M),就是O(MN),目测map的查找应该是O($\sqrt(M)$).后面我的做法是先分别排序,然后合并查找,利用的是两者依然有序的特点。具体可以参考下下面的代码,我看了用一行的做法,是利用了python本身map的用法,map(func, iterable),把func依次作用到iterable的元素上,值得注意的是list.count(str)这个函数,是去匹配list里面出现了多少个str。

我的代码实现:

class Solution(object):
    def numJewelsInStones(self, J, S):
        """
        :type J: str
        :type S: str
        :rtype: int
        """
        target = sorted(J)
        source = sorted(S)
        i = len(target)
        j = len(source)
        index1 = 0
        index2 = 0
        cnt = 0
        while index1 < j and index2 < i:
            if source[index1] < target[index2]:
                index1+=1
            elif source[index1] == target[index2]:
                index1+=1
                cnt+=1
            else:
                index2+=1
        return cnt
    
        

  

一行的实现:

def numJewelsInStones(self, J, S):
    return sum(map(J.count, S))

  

Leetcode #771. Jewels and Stones

标签:different   作用   count   字符串   合并   iterable   模式   turn   out   

原文地址:https://www.cnblogs.com/lhppom/p/8475488.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!