LeetCode 每日一题 2025/3/10-2025/3/16
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步
目录
- 3/10 2269. 找到一个数字的 K 美丽值
- 3/11 2012. 数组美丽值求和
- 3/12 3305. 元音辅音字符串计数 I
- 3/13 3306. 元音辅音字符串计数 II
- 3/14 3340. 检查平衡字符串
- 3/15 3110. 字符串的分数
- 3/16
3/10 2269. 找到一个数字的 K 美丽值
依次判断
def divisorSubstrings(num, k):
"""
:type num: int
:type k: int
:rtype: int
"""
n=len(str(num))
cur = num
MOD = 10**k
ans=0
for i in range(n-k+1):
v = cur%MOD
if v!=0 and num%v==0:
ans+=1
cur//=10
return ans
3/11 2012. 数组美丽值求和
maxl[i]记录从0~i的最大值 minr[i]记录从i~n的最小值
对于nums[x] 如果maxl[x-1]<nums[x]<minr[x+1]则美丽值为2
def sumOfBeauties(nums):
"""
:type nums: List[int]
:rtype: int
"""
n=len(nums)
maxl=[0]*n
minr=[0]*n
maxl[0]=nums[0]
minr[-1]=nums[-1]
for i in range(1,n):
maxl[i]=max(maxl[i-1],nums[i])
minr[n-1-i]=min(minr[n-i],nums[n-1-i])
ans = 0
for i in range(1,n-1):
if maxl[i-1]<nums[i] and nums[i]<minr[i+1]:
ans+=2
elif nums[i-1]<nums[i] and nums[i]<nums[i+1]:
ans+=1
return ans
3/12 3305. 元音辅音字符串计数 I
恰好k个 可以看作至少k+1个 减去 至少k个
双指针
tag用来记录元音字母出现次数
def countOfSubstrings(word, k):
"""
:type word: str
:type k: int
:rtype: int
"""
def func(k):
l=0
ans = 0
curk = 0
tag = {}
for w in word:
if w in "aeiou":
tag[w] = tag.get(w,0)+1
else:
curk+=1
while len(tag)==5 and curk>=k:
lw = word[l]
if lw in "aeiou":
tag[lw]-=1
if tag[lw]==0:
del tag[lw]
else:
curk-=1
l+=1
ans+=l
return ans
return func(k)-func(k+1)
3/13 3306. 元音辅音字符串计数 II
恰好k个 可以看作至少k+1个 减去 至少k个
双指针
tag用来记录元音字母出现次数
def countOfSubstrings(word, k):
"""
:type word: str
:type k: int
:rtype: int
"""
def func(k):
l=0
ans = 0
curk = 0
tag = {}
for w in word:
if w in "aeiou":
tag[w] = tag.get(w,0)+1
else:
curk+=1
while len(tag)==5 and curk>=k:
lw = word[l]
if lw in "aeiou":
tag[lw]-=1
if tag[lw]==0:
del tag[lw]
else:
curk-=1
l+=1
ans+=l
return ans
return func(k)-func(k+1)
3/14 3340. 检查平衡字符串
将奇偶位置的数值相减 判断最后差值是否为0
def isBalanced(num):
"""
:type num: str
:rtype: bool
"""
cur=0
n=len(num)
for i in range(n):
if i%2:
cur+=int(num[i])
else:
cur-=int(num[i])
return False if cur else True
3/15 3110. 字符串的分数
按要求依次计算
def scoreOfString(s):
"""
:type s: str
:rtype: int
"""
n=len(s)
ans = 0
for i in range(n-1):
ans += abs(ord(s[i+1])-ord(s[i]))
return ans
3/16