LeetCode-每日一题-2025310-2025316
LeetCode 每日一题 2025/3/10-2025/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]记录从in的最小值 对于nums[x] 如果maxl[x-1] 恰好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 2272. 最大波动的子字符串
枚举子字符串中最大和最少的字符 variance/solutions/1501524/zui-da-bo-dong-de-zi-zi-fu-chuan-by-leet- xsnp/?envType=daily-question&envId=2025-03-16 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