记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步
目录
-
-
- [3/10 2269. 找到一个数字的 K 美丽值](#3/10 2269. 找到一个数字的 K 美丽值)
- [3/11 2012. 数组美丽值求和](#3/11 2012. 数组美丽值求和)
- [3/12 3305. 元音辅音字符串计数 I](#3/12 3305. 元音辅音字符串计数 I)
- [3/13 3306. 元音辅音字符串计数 II](#3/13 3306. 元音辅音字符串计数 II)
- [3/14 3340. 检查平衡字符串](#3/14 3340. 检查平衡字符串)
- [3/15 3110. 字符串的分数](#3/15 3110. 字符串的分数)
- [3/16 2272. 最大波动的子字符串](#3/16 2272. 最大波动的子字符串)
-
3/10 2269. 找到一个数字的 K 美丽值
依次判断
python
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
python
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用来记录元音字母出现次数
python
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用来记录元音字母出现次数
python
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
python
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. 字符串的分数
按要求依次计算
python
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 2272. 最大波动的子字符串
枚举子字符串中最大和最少的字符
python
def largestVariance(s):
"""
:type s: str
:rtype: int
"""
from collections import defaultdict
pos= defaultdict(list)
for i,c in enumerate(s):
pos[c].append(i)
ans=0
for c0,p0 in pos.items():
for c1,p1 in pos.items():
if c0!=c1:
i=j=0
f,g=0,float("-inf")
while i<len(p0) or j<len(p1):
if j==len(p1) or (i<len(p0) and p0[i]<p1[j]):
f,g=max(f,0)+1,g+1
i+=1
else:
f,g=max(f,0)-1,max(f,g,0)-1
j+=1
ans=max(ans,g)
return ans