0223leetcode刷题5道python
125
题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例:
解答:
class Solution:
def isPalindrome(self, s: str) -> bool:
'''
#filter函数,过滤字符串 isalnum保留数字字母
s=''.join(filter(str.isalnum,s)).lower()
return s==s[::-1]
'''
#正则
s=re.sub('[^a-zA-Z0-9]','',s)
s=s.lower()
return s==s[::-1]
209
题目描述;
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例:
解答:
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
if target>sum(nums):
return 0
left,right,res,sum_lr=0,0,len(nums)+1,0
while right < len(nums):
while sum_lr<target and right<len(nums): # sum_lr小则右指针右移
sum_lr += nums[right]
right += 1
while sum_lr>=target and left>=0: # sum_lr大则左指针右移
res = min(res, right-left)
sum_lr -= nums[left]
left += 1
return res
1008
题目描述:
返回与给定前序遍历 preorder 相匹配的二叉搜索树(binary search tree)的根结点。
(回想一下,二叉搜索树是二叉树的一种,其每个节点都满足以下规则,对于 node.left 的任何后代,值总 < node.val,而 node.right 的任何后代,值总 > node.val。此外,前序遍历首先显示节点 node 的值,然后遍历 node.left,接着遍历 node.right。)
题目保证,对于给定的测试用例,总能找到满足要求的二叉搜索树。
示例:
解答:
# 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 bstFromPreorder(self, preorder: List[int]) -> TreeNode:
if not preorder:
return None
root = TreeNode(preorder[0])
left, right = [], []
for x in preorder[1:]:
if x < root.val:
left.append(x)
else:
right.append(x)
root.left = self.bstFromPreorder(left)
root.right = self.bstFromPreorder(right)
return root
1052
题目描述:
今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。
在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。
书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。
请你返回这一天营业下来,最多有多少客户能够感到满意的数量。
示例:
解答:
class Solution:
def maxSatisfied(self, customers: List[int], grumpy: List[int], X: int) -> int:
n=len(grumpy)
nums1=sum(customers[:X])
nums2=0
for i in range(X,n):
if grumpy[i]==0:
nums2+=customers[i]
max_nums = nums1 + nums2
for i in range(1, n - X + 1):
nums1 -= customers[i - 1]
nums1 += customers[i + X - 1]
if grumpy[i - 1] == 0:
nums2 += customers[i - 1]
if grumpy[i + X - 1] == 0:
nums2 -= customers[i + X - 1]
max_nums = max(max_nums, nums2 + nums1)
return max_nums
1750
题目描述:
给你一个只包含字符 ‘a’,‘b’ 和 ‘c’ 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次:
选择字符串 s 一个 非空 的前缀,这个前缀的所有字符都相同。
选择字符串 s 一个 非空 的后缀,这个后缀的所有字符都相同。
前缀和后缀在字符串中任意位置都不能有交集。
前缀和后缀包含的所有字符都要相同。
同时删除前缀和后缀。
请你返回对字符串 s 执行上面操作任意次以后(可能 0 次),能得到的 最短长度 。
示例:
解答:
class Solution:
def minimumLength(self, s: str) -> int:
l=0
r=len(s)-1
while l<r and s[l]==s[r]:
while l<r and s[l]==s[l+1]:
l+=1
while l<r and s[r]==s[r-1]:
r-=1
l+=1
r-=1
return max(r-l+1,0)
本文地址:https://blog.csdn.net/yeqing1997/article/details/113969082