#动态规划 classSolution: defisMatch(self, s: str, p: str) -> bool: s, p = '0'+s, '0'+p #用'0'来代替'',使得题解更清晰 m, n = len(s), len(p) #dp[i][j]表明s[:i+1]是否与p[:j+1]匹配,因为我们前面加上了'0',所以这里dp[i][j]与s[i],p[j]关联 dp = [[False ] * n for _ inrange(m)] dp[0][0] = True for j inrange(2, n, 2): #初始化首行 dp[0][j] = dp[0][j-2] and p[j] == '*'# 'x*'可视为'' for i inrange(1,m): for j inrange(n): if p[j] == '*': if dp[i][j-2] or (dp[i-1][j] and p[j-1] in [s[i],'.']): dp[i][j] = True else: if dp[i-1][j-1] and p[j] in [s[i],'.']: dp[i][j] = True return dp[-1][-1]
classSolution: defkSum(self, nums: List[int], k: int) -> int: #求出最大值s,并且把所有负数转为正数,这样统一只需要做减法即可 sum = 0 for i, x inenumerate(nums): if x >= 0: sum += x else: nums[i] = -x nums.sort()
#以累加和来排列子序列,排到第k个终止 stack = [(0,0)] #空子序列,一个用来装子序列和,一个装下标 for _ inrange(k-1): #已经有一个(0,0),所以只需要循环k-1次 s, i = heappop(stack) if i < len(nums): #子序列下标不超过原序列下标 # 在子序列的末尾添加 nums[i] heappush(stack, (s + nums[i] , i+1) ) # 下一个添加/替换的元素下标为 i+1 if i: # 替换子序列的末尾元素为 nums[i] heappush(stack, (s + nums[i] - nums[i-1], i+1) ) returnsum - stack[0][0]