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個の正の整数と正の整数のターゲットを含む配列が与えられます。
配列内の合計≥ターゲットを満たす最小の長さの連続サブ配列[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
タイトルの説明:
指定されたプレオーダートラバーサルプレオーダーに一致するバイナリ検索ツリーのルートノードを返します。
(二分探索木は二分木の一種であり、各ノードは次の規則を満たしていることを思い出してください。node.leftの子孫の場合、値は常に<node.valであり、node.rightの子孫の場合は値です。は常に> node .valです。さらに、プレオーダートラバーサルは最初にノードノードの値を表示し、次に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分間怒らないようにする秘訣を知っていますが、使用できるのは1回だけです。
満足できる最大のお客様である今日の営業に戻ってください。
例:
回答:
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を空でないプレフィックスとして選択します。 、thisプレフィックスのすべての文字は同じです。
文字列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)