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]