Leetcode 第190场周赛

都是简单题。主要看基础函数的熟练度,手速快不快。

给你一个字符串 sentence 作为句子并指定检索词为 searchWord ,其中句子由若干用 单个空格 分隔的单词组成。

请你检查检索词 searchWord 是否为句子 sentence 中任意单词的前缀。

如果 searchWord 是某一个单词的前缀,则返回句子 sentence 中该单词所对应的下标(下标从 1 开始)。
如果 searchWord 是多个单词的前缀,则返回匹配的第一个单词的下标(最小下标)。
如果 searchWord 不是任何单词的前缀,则返回 -1 。
字符串 S 的 「前缀」是 S 的任何前导连续子字符串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/check-if-a-word-occurs-as-a-prefix-of-any-word-in-a-sentence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution:
    def isPrefixOfWord(self, sentence: str, searchWord: str) -> int:
        A = sentence.split()
        for i,x in enumerate(A, 1):
            if x.startswith(searchWord):
                return i
        return -1

给你字符串 s 和整数 k 。

请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。

英文中的 元音字母 为(a, e, i, o, u)。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-number-of-vowels-in-a-substring-of-given-length
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution:
    def maxVowels(self, s: str, k: int) -> int:
        def f(x): return 1 if x in "aeiou" else 0
        cur = sum(map(f, s[:k]))
        ret = cur
        for i in range(k,len(s)):
            cur =cur + f(s[i]) - f(s[i-k])
            ret = max(ret, cur)
        return ret

给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。

请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pseudo-palindromic-paths-in-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def pseudoPalindromicPaths (self, root: TreeNode) -> int:
        
        def f(x):
            for i in range(1, 10):
                if x == (1 << i):
                    return True
            return True if x == 0 else False
        
        ret = 0
        def dfs(root, cur):
            nonlocal ret
            if not root.left and not root.right:
                ret += f(cur ^ (1 << root.val))
                return 
            if root.left:
                dfs(root.left, cur ^ (1 << root.val))
            if root.right:
                dfs(root.right, cur ^ ( 1<< root.val))
        
        if not root:
            return 0
        dfs(root, 0)
        return ret

给你两个数组 nums1 和 nums2 。

请你返回 nums1 和 nums2 中两个长度相同的 非空 子序列的最大点积。

数组的非空子序列是通过删除原数组中某些元素(可能一个也不删除)后剩余数字组成的序列,但不能改变数字间相对顺序。比方说,[2,3,5] 是 [1,2,3,4,5] 的一个子序列而 [1,5,3] 不是。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-dot-product-of-two-subsequences
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution:
    # dp[i][j] = dp[i-1][j-1] + nums[i]*nums[j], dp[i-1][j], dp[i][j-1]
    def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int:
        n1, n2 = len(nums1), len(nums2)
        dp = [[0]*(n1+1) for _ in range(n2+1)]
        for i in range(n2):
            for j in range(n1):
                dp[i][j] = max(dp[i-1][j-1]+nums1[j]*nums2[i], dp[i-1][j], dp[i][j-1])
        x1,x2,y1,y2 = min(nums1), max(nums1), min(nums2), max(nums2)
        if x1*y1 < 0 and x2 * y2 < 0:
            return max(x1*y2, x2*y1)
        return dp[n2-1][n1-1]

你可能感兴趣的:(python3,leetcode周赛)