leetcode刷题Day7

leetcode刷题Day7

64.判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。

  • 示例:输入:s = “abc”, t = “ahbgdc”; 输出:true
class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        if not s: return True
        i = 0
        for j in t:
            if s[i] == j:
                i += 1
                if i == len(s):
                    return True
        return False

分析:采用双指针,当s[i] == t[j]时,i += 1,j += 1;当s[i] != t[j]时,j += 1。

65.最长回文串
给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。
在构造过程中,请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。

  • 示例:输入:s = “abccccdd”; 输出:7; 解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
class Solution:
    def longestPalindrome(self, s: str) -> int:
        count = collections.Counter(s)
        sum_len = 0
        for i in count:
            if count[i] > 1:
                sum_len += (count[i] // 2)
        return sum_len *2 + 1 if sum_len*2 < len(s) else len(s)

分析:求可以构造的最长回文串长度,就是最多偶数字符加一个奇数字符。

66.左叶子之和
给定二叉树的根节点 root ,返回所有左叶子之和。
在这里插入图片描述

  • 示例:输入: root = [3,9,20,null,null,15,7] ; 输出: 24 ; 解释:在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。
class Solution:
    def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0
        
        stack = [root]
        sum_of_left_leaves = 0
        
        while stack:
            node = stack.pop()
            if node.left:
                if not node.left.left and not node.left.right:
                    sum_of_left_leaves += node.left.val
                else:
                    stack.append(node.left)
            if node.right:
                stack.append(node.right)
        
        return sum_of_left_leaves

分析:递归,左叶子节点,左子树不空,左子树的左子树和右子树为空。

67.Fizz Buzz
给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:

  • answer[i] == “FizzBuzz” 如果 i 同时是 3 和 5 的倍数。

  • answer[i] == “Fizz” 如果 i 是 3 的倍数。

  • answer[i] == “Buzz” 如果 i 是 5 的倍数。

  • answer[i] == i (以字符串形式)如果上述条件全不满足。

  • 示例:输入:n = 3; 输出:[“1”,“2”,“Fizz”]

class Solution:
    def fizzBuzz(self, n: int) -> List[str]:
        answer = [1] * (n+1)
        for i in range(1, n+1):
            if i % 3 == 0 and i % 5 == 0:
                answer[i] = "FizzBuzz"
            elif i % 3 == 0:
                answer[i] = "Fizz"
            elif i % 5 == 0:
                answer[i] = "Buzz"
            else: 
                answer[i] = str(i)
        return answer[1:]

68.第三大的数
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。

  • 示例:输入:[3, 2, 1]; 输出:1; 解释:第三大的数是 1 。
class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        a = list(set(nums))
        a.sort()
        if len(a) < 3:
            return a[-1]
        else:
            return a[-3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值