尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Kimi LeetCode 3485. 删除元素后 K 个字符串的最长公共前缀 C++实现

Kimi    LeetCode 3485. 删除元素后 K 个字符串的最长公共前缀 C++实现
📅 发布时间:2026/7/5 10:50:10

以下是 LeetCode 3485 删除元素后 K 个字符串的最长公共前缀 的 C++ 实现。

核心思路(排序法)

参考 灵神(灵茶山艾府)的做法:

1. 排序后连续 k 个字符串的 LCP 最优:将 `words` 按字典序排序,任意 k 个字符串的最长公共前缀最大值,一定来自某个连续的 k 个字符串子数组。且该子数组的 LCP 等于首尾两个字符串的 LCP。
2. 预处理全局最大/次大 LCP:遍历所有长度为 k 的窗口,计算每个窗口首尾的 LCP,记录:
- `mx`:最大 LCP 值
- `mx2`:次大 LCP 值
- `mx_i`:最大 LCP 对应的窗口起始下标(在排序后的数组中)
3. 分类讨论:
- 若移除的字符串不在 `mx` 窗口内 → 答案为 `mx`
- 若移除的字符串在 `mx` 窗口内 → 该窗口被破坏,答案为 `mx2`
4. 边界:若 `k >= n`,移除一个后剩余不足 k 个,全填 `0`。

```cpp
class Solution {
public:
vector<int> longestCommonPrefix(vector<string>& words, int k) {
int n = words.size();

// 边界:移除一个后只剩 n-1 个,若 n-1 < k 则全为 0
if (k >= n) {
return vector<int>(n, 0);
}

// 1. 按字符串字典序对下标排序
vector<int> idx(n);
iota(idx.begin(), idx.end(), 0);
sort(idx.begin(), idx.end(), [&](int a, int b) {
return words[a] < words[b];
});

// 2. 辅助函数:计算两个字符串的 LCP 长度
auto lcp = [&](const string& s, const string& t) -> int {
int i = 0;
int maxLen = min(s.size(), t.size());
while (i < maxLen && s[i] == t[i]) {
i++;
}
return i;
};

// 3. 遍历所有长度为 k 的窗口,找 mx, mx2, mx_i
int mx = 0; // 最大 LCP
int mx2 = 0; // 次大 LCP
int mx_i = 0; // 最大 LCP 窗口的起始下标

for (int i = 0; i <= n - k; i++) {
int len = lcp(words[idx[i]], words[idx[i + k - 1]]);
if (len > mx) {
mx2 = mx;
mx = len;
mx_i = i;
} else if (len > mx2) {
mx2 = len;
}
}

// 4. 构建答案
vector<int> ans(n, mx);
// 属于最大 LCP 窗口 [mx_i, mx_i + k - 1] 的原始下标,答案改为 mx2
for (int i = mx_i; i < mx_i + k; i++) {
ans[idx[i]] = mx2;
}

return ans;
}
};
```

复杂度分析

指标 复杂度
时间 `O(n log n + 总字符数)` — 排序 `O(n log n)`,所有 LCP 计算的总比较次数受限于字符串总长度(`≤ 10^5`)
空间 `O(n)` — 下标数组 + 答案数组

说明

- 排序时只排下标,不移动原字符串,保证能追溯到每个元素的原始位置。
- `lcp` 函数直接按字符比较(题目保证全为小写英文字母)。
- 当 `mx` 窗口内有多个相同字符串时,移除其中一个可能导致窗口内仍剩 `k` 个相同字符串,但按照排序后的窗口定义,该特定窗口已被破坏;此时答案退化为 `mx2`,这在题解中已被证明是正确的(若 `mx2` 与 `mx` 有交集,则 `mx2` 一定是 `mx` 的前缀,仍能满足)。

相关新闻

  • SMT精密贴片工艺:核心环节与质量控制详解
  • 高速PCB设计中过孔残桩问题的分析与优化
  • 医疗设备推拉自锁连接器技术解析与应用

最新新闻

  • 品牌出海数字资产怎么做?从搜索收录到海外AI推荐排名的GEO优化路径
  • 如何高效修复Windows更新故障:Reset Windows Update Tool终极指南
  • Redis分布式锁进阶第三十八篇
  • Unlock Music:3分钟本地解密QQ音乐、网易云音乐的完整指南
  • 5个实战技巧:深度掌握N_m3u8DL-RE的高级应用
  • Obsidian 同步到底怎么选?2026 年主流方案实测对比

日新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号