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