Kimi    LeetCode 3333. 找到初始输入字符串 II Python3实现
LeetCode 3333. 找到初始输入字符串 II — Python3 实现参考 doocs/leetcode 官方题解 提供两种 Python3 实现方案---方法一动态规划 前缀和推荐pythonfrom typing import Listfrom itertools import accumulateclass Solution:def possibleStringCount(self, word: str, k: int) - int:mod 10**9 7nums [] # 每组可额外选择的字符数ans 1 # 总方案数无长度限制cur 0 # 当前组长度for i, c in enumerate(word):cur 1# 遇到组边界if i len(word) - 1 or c ! word[i 1]:if cur 1:if k 0:nums.append(cur - 1) # 可额外删除 cur-1 个ans ans * cur % mod # 该组有 cur 种选择cur 0k - 1 # 每组至少选一个k 减少# 如果 k 0说明每组至少选一个已经满足长度要求if k 1:return ansm len(nums)# f[i][j] 表示前 i 组中额外选择 j 个字符的方案数f [[0] * k for _ in range(m 1)]f[0][0] 1for i, x in enumerate(nums, 1):# 前缀和s[j] sum(f[i-1][0..j-1])s list(accumulate(f[i - 1], initial0))for j in range(k):# f[i][j] sum(f[i-1][j-x] ... f[i-1][j])# 用前缀和优化s[j1] - s[max(0, j-x)]l max(0, j - x)f[i][j] (s[j 1] - s[l] mod) % mod# 计算长度小于 k 的方案数额外选择少于 k 个字符invalid sum(f[m][j] for j in range(k)) % mod# 答案 总方案数 - 长度小于 k 的方案数return (ans - invalid) % mod---方法二滑动窗口优化空间优化至 O(k)pythonfrom typing import Listfrom collections import dequeclass Solution:def possibleStringCount(self, word: str, k: int) - int:mod 10**9 7# 获取连续相同字符的分组长度def get_groups(s: str) - List[int]:groups []cnt 1for i in range(1, len(s)):if s[i] s[i - 1]:cnt 1else:groups.append(cnt)cnt 1groups.append(cnt)return groupsgroups get_groups(word)# 总方案数无长度限制每组长度相乘total 1for g in groups:total total * g % mod# 如果组数 k任何字符串长度都至少为 kif k len(groups):return total# 需要额外选择的字符数need k - len(groups)# dp[j] 表示使用已处理组额外选择 j 个字符的方案数dp [0] * needdp[0] 1 # 基础情况for g in groups:new_dp [0] * needwindow_sum 0# 滑动窗口窗口大小为 g该组可额外选择的字符数for j in range(need):new_dp[j] window_sumwindow_sum (window_sum dp[j]) % mod# 维护窗口大小if j g - 1:window_sum (window_sum - dp[j - (g - 1)] mod) % moddp new_dp# 计算无效方案数长度小于 kinvalid sum(dp) % modreturn (total - invalid) % mod---核心思路1. 分组统计将连续相同字符分组例如 aabbccdd → [2,2,2,2]。每组至少保留 1 个字符可额外保留 0 到 group-1 个。2. 总方案数无长度限制时每组有 group 种选择保留 1 到 group 个总方案数为各组长度乘积。3. 长度约束要求最终字符串长度 ≥ k。- 先每组至少选 1 个消耗 groups.size() 个字符。- 剩余需要 k - groups.size() 个额外字符。- 用 DP 计算额外选择少于 k - groups.size() 个字符的方案数从总数中减去。4. DP 优化- 前缀和f[i][j] sum(f[i-1][j-x] ... f[i-1][j])用前缀和 O(1) 计算区间和。- 滑动窗口维护大小为 group 的窗口空间优化至 O(k)。复杂度分析方法 时间复杂度 空间复杂度前缀和 DP O(n m×k) O(m×k)滑动窗口 DP O(n m×k) O(k)其中 m 为分组数m ≤ nk ≤ 2000。两种方法均可通过滑动窗口版本空间更优。

相关新闻

超音速腔体流动与Rossiter振荡机制解析

超音速腔体流动与Rossiter振荡机制解析

1. 超音速腔体流动基础与Rossiter振荡机制在高速空气动力学领域,腔体流动是一个经典而复杂的研究课题。当高速气流(特别是超音速流)流经一个开口腔体结构时,会在腔内形成特定的流动模式,产生强烈的压力振荡和声学共振现…

2026/6/21 5:46:13阅读更多 →
PotatoNV终极指南:三步解锁华为麒麟设备Bootloader,开启刷机自由之路

PotatoNV终极指南:三步解锁华为麒麟设备Bootloader,开启刷机自由之路

PotatoNV终极指南:三步解锁华为麒麟设备Bootloader,开启刷机自由之路 【免费下载链接】PotatoNV Unlock the bootloader on Huawei devices with Kirin 620/65x/95x/960 项目地址: https://gitcode.com/gh_mirrors/po/PotatoNV 对于华为和荣耀设备…

2026/6/21 5:41:13阅读更多 →
SC100多核DSP链接器配置实战:MMU映射、内存优化与核间通信

SC100多核DSP链接器配置实战:MMU映射、内存优化与核间通信

1. 项目概述与核心价值如果你在嵌入式领域,特别是涉及多核DSP或高性能处理器开发,那么“链接器”这个词对你来说绝不陌生。它远不止是编译流程最后那个把一堆.o文件粘在一起的工具。在像StarCore SC100这类带有复杂内存管理单元(MMU&#xff…

2026/6/21 5:41:13阅读更多 →
嵌入式GUI性能优化实战:emWin内存管理与驱动配置深度解析

嵌入式GUI性能优化实战:emWin内存管理与驱动配置深度解析

1. 项目概述与核心价值在嵌入式系统开发中,图形用户界面(GUI)往往是连接用户与设备的核心桥梁,其流畅度与稳定性直接决定了产品的用户体验。然而,嵌入式环境通常资源紧张——RAM有限、CPU主频不高、显示控制器性能各异…

2026/6/21 6:51:17阅读更多 →
LPC21xx/22xx I2C从机发送模式状态机编程实战指南

LPC21xx/22xx I2C从机发送模式状态机编程实战指南

1. 项目概述:深入LPC21xx/22xx的I2C从机发送模式在嵌入式开发中,I2C总线因其简洁的两线制(SDA数据线和SCL时钟线)和灵活的多主多从架构,成为了连接微控制器与各类传感器、存储器、IO扩展芯片的首选协议之一。然而&…

2026/6/21 6:51:17阅读更多 →
SDIRK方法结合光滑扰动框架:提升刚性ODE求解的鲁棒性与效率

SDIRK方法结合光滑扰动框架:提升刚性ODE求解的鲁棒性与效率

1. 项目缘起:当数值计算遇上“刚性”难题在工程仿真、物理模拟和金融衍生品定价这些领域,我们经常要和一组描述系统演化的微分方程打交道。这些方程,特别是常微分方程(ODE)初值问题,是连接数学模型与真实世…

2026/6/21 6:51:17阅读更多 →
Qwen3.6原生支持AMD GPU:ROCm 6.4+vLLM 0.6.3实战部署指南

Qwen3.6原生支持AMD GPU:ROCm 6.4+vLLM 0.6.3实战部署指南

1. 项目概述:为什么“Qwen 3.6 在 AMD GPU 的 Day 0 支持”不是一句宣传口号,而是实打实的工程突破“Qwen 3.6 在 AMD GPU 的 Day 0 支持”——这行字背后没有虚张声势,它直接对应着一个我上周在 ROCm 6.4 环境下,用 Radeon Insti…

2026/6/21 6:51:17阅读更多 →
DSP56858嵌入式电话SDK:实时信号处理与电信功能实现详解

DSP56858嵌入式电话SDK:实时信号处理与电信功能实现详解

1. 项目概述与核心价值如果你在2000年代初期接触过功能电话(Feature Phone)或者模拟电话终端设备的开发,那你一定对DSP56858这颗芯片不陌生。它曾是Motorola(后来的Freescale,现为NXP)在电信领域的一颗明星…

2026/6/21 6:51:17阅读更多 →
嵌入式GUI开发:emWin多缓冲与虚拟屏幕技术实战解析

嵌入式GUI开发:emWin多缓冲与虚拟屏幕技术实战解析

1. 项目概述:为什么嵌入式GUI需要多缓冲与虚拟屏幕?在嵌入式系统上开发图形用户界面(GUI),尤其是在资源受限的单片机(MCU)环境中,我们常常面临一个核心矛盾:有限的硬件性…

2026/6/21 6:46:17阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/21 0:00:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/21 0:00:40阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/21 0:00:40阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/21 0:00:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/21 0:00:40阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/21 0:00:40阅读更多 →