欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

0223leetcode刷题5道python

程序员文章站 2022-04-09 16:19:44
125题目描述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例:解答:class Solution: def isPalindrome(self, s: str) -> bool: ''' #filter函数,过滤字符串 isalnum保留数字字母 s=''.join(filter(str.isalnum,s)).lower() r...

125

题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。

示例:
0223leetcode刷题5道python
解答:

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 。

示例:
0223leetcode刷题5道python
解答:

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。)
题目保证,对于给定的测试用例,总能找到满足要求的二叉搜索树。

示例:
0223leetcode刷题5道python
解答:

# 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 分钟不生气,但却只能使用一次。
请你返回这一天营业下来,最多有多少客户能够感到满意的数量。

示例:
0223leetcode刷题5道python
解答:

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 次),能得到的 最短长度 。

示例:
0223leetcode刷题5道python
解答:

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