LeetCode 每日一题 2025/3/10-2025/3/16

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步


目录

      • [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. 最大波动的子字符串

枚举子字符串中最大和最少的字符

https://leetcode.cn/problems/substring-with-largest-variance/solutions/1501524/zui-da-bo-dong-de-zi-zi-fu-chuan-by-leet-xsnp/?envType=daily-question\&envId=2025-03-16

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

相关推荐
写个博客34 分钟前
暑假算法日记第二天
算法
ChaITSimpleLove1 小时前
.NET9 实现排序算法(MergeSortTest 和 QuickSortTest)性能测试
算法·排序算法·.net·benchmarkdotnet·datadog.trace
CVer儿1 小时前
svd分解求旋转平移矩阵
线性代数·算法·矩阵
Owen_Q1 小时前
Denso Create Programming Contest 2025(AtCoder Beginner Contest 413)
开发语言·算法·职场和发展
Wilber的技术分享2 小时前
【机器学习实战笔记 14】集成学习:XGBoost算法(一) 原理简介与快速应用
人工智能·笔记·算法·随机森林·机器学习·集成学习·xgboost
Tanecious.2 小时前
LeetCode 876. 链表的中间结点
算法·leetcode·链表
Wo3Shi4七3 小时前
哈希冲突
数据结构·算法·go
呆呆的小鳄鱼3 小时前
cin,cin.get()等异同点[面试题系列]
java·算法·面试
Touper.3 小时前
JavaSE -- 泛型详细介绍
java·开发语言·算法
sun0077003 小时前
std::forward作用
开发语言·c++·算法