leetcode11

来源:互联网 发布:ubuntu ssh 安装 编辑:程序博客网 时间:2024/06/08 04:48

Wildcard Matching
看的大神的答案。当p[pPointer] == ‘?’ or p[pPointer] == s[sPointer]的时候,两个指针都向后移一位,当p[pPointer] == ‘*’的时候,用star记录下p当前的位置,pPointer向后移,ss记录s当前的位置,如果上面的条件都不满足了,看star是不是-1,不是的话,把pPointer拉回到star的下一个,ss加一,这里是看*能匹配多少。
比如s=’abcabab’,p=’a*ab’,star=1,当pPointer==4的时候,p[pPointer]!=s[sPointer],所以pPointer又被拉回了2,sPointer被拉回了4,因为ss要先加1。

class Solution:    # @param s, an input string    # @param p, a pattern string    # @return a boolean    def isMatch(self, s, p):        len_s = len(s); len_p = len(p)        pPointer = sPointer = ss = 0        star = -1        while sPointer < len_s:            if pPointer < len_p and (p[pPointer] == '?' or p[pPointer] == s[sPointer]):                sPointer += 1; pPointer += 1;                continue            if pPointer < len_p and p[pPointer] == '*':                star = pPointer; pPointer +=1; ss = sPointer                continue            if star != -1:                pPointer = star + 1; ss += 1; sPointer = ss                continue            return False        while pPointer < len_p and p[pPointer] == '*':            pPointer += 1        return pPointer == len_p

Jump Game II
太可怕了,这方法。。。什么时候我才能自己想出来。
对于每次lastReach < i 时,说明跳上一次不到i,需要cnt++

class Solution(object):    def jump(self, nums):        """        :type nums: List[int]        :rtype: int        """        curReach=0 #当前能跳到的最远距离        lastReach=0 #上次最远可以跳到的距离        count=0        n=len(nums)        for i in range(n):            if lastReach<i:                lastReach=curReach                count+=1            curReach=max(curReach,nums[i]+i)            print i,lastReach,curReach        return count

Maximum Subarray
。。。这么简单的都做了这么久

#coding=utf-8class Solution(object):    def maxSubArray(self, nums):        """        :type nums: List[int]        :rtype: int        """        res=[]        res.append(nums[0])        for i in range(1,len(nums)):            if res[i-1]+nums[i]<nums[i]:                res.append(nums[i])            else:                res.append(res[i-1]+nums[i])        return max(res)

Permutations
每次拿出一个数,剩下的数递归

#coding=utf-8class Solution(object):    def permute(self, nums):        """        :type nums: List[int]        :rtype: List[List[int]]        """        if len(nums)==0:            return []        if len(nums)==1:            return [nums]        res=[]        for i in range(len(nums)):            for j in self.permute(nums[:i]+nums[i+1:]):                res.append([nums[i]]+j)        return res
原创粉丝点击