当前位置: 首页 > news >正文

Kimi k2.6 LeetCode 3003. 执行操作后的最大分割数量 Go实现

以下是 LeetCode 3003. 执行操作后的最大分割数量 的 Go 实现,采用状态压缩 + 记忆化搜索思路。

Go 代码

```go
package main

func maxPartitionsAfterOperations(s string, k int) int {
n := len(s)
// 记忆化:key = (i << 27) | (cur << 1) | t
// i 最大 1e5,cur 最大 2^26,需要更灵活的 key
type state struct {
i int
cur int
t int
}
f := map[state]int{}

var dfs func(i, cur, t int) int
dfs = func(i, cur, t int) int {
if i >= n {
return 1
}

key := state{i, cur, t}
if v, ok := f[key]; ok {
return v
}

v := 1 << (s[i] - 'a')
nxt := cur | v
ans := 0

// 不修改当前字符
if bitCount(nxt) > k {
// 超过 k 个不同字符,开启新分割块
ans = dfs(i+1, v, t) + 1
} else {
ans = dfs(i+1, nxt, t)
}

// 尝试修改当前字符
if t > 0 {
for j := 0; j < 26; j++ {
nxt = cur | (1 << j)
if bitCount(nxt) > k {
ans = max(ans, dfs(i+1, 1<<j, 0)+1)
} else {
ans = max(ans, dfs(i+1, nxt, 0))
}
}
}

f[key] = ans
return ans
}

return dfs(0, 0, 1)
}

func bitCount(x int) int {
cnt := 0
for x > 0 {
cnt++
x &= x - 1
}
return cnt
}

func max(a, b int) int {
if a > b {
return a
}
return b
}
```

关键点说明

要点 说明
位掩码 `cur` 用 int 的 26 个二进制位表示 a-z 字符是否在当前分割块中出现
`bitCount` 计算掩码中 1 的个数,Go 标准库没有内置,手动实现
记忆化 key 用 struct `(i, cur, t)` 作为 map 的 key,Go 的 map 支持 struct key
不修改分支 当前字符加入后若超过 `k` 个不同字符,必须开启新分割块
修改分支 枚举 26 种可能的修改字符,取最优结果

复杂度分析

- 时间复杂度:O(n \times 26 \times 26),实际有效状态数远小于理论值
- 空间复杂度:O(n \times 26 \times 26),用于记忆化 map

注意

Go 中没有 `Integer.bitCount()`,需要手动实现。上述实现使用 `x &= x - 1` 的经典位运算技巧来统计 1 的个数,效率较高。

http://www.jsqmd.com/news/951885/

相关文章:

  • 别再死记硬背!一个‘顾客到达’的例子,彻底搞懂复合泊松过程的期望与方差推导
  • 告别重复造轮子:用快马一键生成gptimage2安卓版高效开发模板
  • 实战指南:基于快马ai快速开发can总线监控与诊断上位机软件
  • 五步构建完美黑苹果系统:OpenCore引导配置完全指南
  • DankDroneDownloader:无人机固件自由与历史版本恢复的终极解决方案
  • AI注销不是删除,而是智能遗忘:解析联邦学习+差分隐私双引擎注销架构(附开源POC代码)
  • 三分钟破解Axure语言障碍:中文界面本地化实战方案
  • 融资超500亿!DeepSeek估值逼近600亿美元,腾讯宁德时代争相入局
  • [特殊字符] 拼多多大厂笔试题——正则表达式
  • 2026年中央空调清洗公司推荐哪些?商业楼宇空调系统清洗选型指南 - 华旭传媒
  • 实战应用:基于快马平台开发带历史记录与偏好设置的夺命许愿软件
  • 如何快速掌握免费音乐歌词获取工具:面向音乐爱好者的完整使用指南
  • SWAT模型实战踩坑记:.sol文件为空、气象数据缺失?手把手教你诊断与修复
  • Kimi k2.6 LeetCode 2972. 统计移除递增子数组的数目 II Python3实现
  • SourceGit:让Git版本控制变得直观高效的跨平台图形化解决方案
  • 智慧教育平台电子课本一键解析:告别繁琐下载的智能解决方案
  • 新手福音:用快马平台生成练习项目,轻松理解github协作开发
  • 【会议征稿通知 | 中国教育发展战略学会教育大数据专业委员会主办 | SPIE出版 | EI 、Scopus稳定检索】第六届先进算法与信号、图像处理国际学术会议(AASIP 2026)
  • 别再怕约束了!手把手教你用QUBO模型把复杂优化问题‘拍扁’成无约束问题
  • 【深度解析】Gemma 4 12B:面向本地 Agent 工作流的统一多模态模型与 OpenAI 兼容接入实践
  • ContextMenuForWindows11开源项目:彻底解放你的右键菜单生产力
  • 如何快速构建你的专属离线英语发音库:11万单词MP3音频一键下载指南
  • LabVIEW 2019生成DLL实战:手把手教你用C# WinForm调用(附避坑指南)
  • 如何永久保存微信聊天记录:掌握你的数字记忆主权
  • 豆包收费成字节AI转折点:顾全全离职,AI4S团队何去何从?
  • 别再乱改my.cnf了!MySQL 8.0+Docker大小写敏感问题的根治方案
  • iFakeLocation终极指南:三步完成iOS虚拟定位的完整方案
  • 2026年近期潍坊行业知名的智能热水龙头生产商怎么选择?专业解析与推荐 - 2026年企业资讯
  • 当H.265遇见老协议:一次给FFmpeg‘打补丁’,让旧直播架构兼容HEVC的实践记录
  • 昌平区如何选购靠谱的近视防控眼镜? - mypinpai