1. 算法训练营实战项目解析
今天要分享的是算法训练营中三个极具代表性的实战题目:字符串迁移、有向图完全联通判断和海岸线计算。这三个题目分别来自卡码网KamaCoder平台,编号为110、105和106。作为经历过多次算法竞赛的老手,我发现这些题目完美覆盖了字符串处理、图论和几何算法三大核心领域,特别适合用来检验和提升综合算法能力。
在实际开发中,类似字符串迁移的问题常见于数据加密和文本处理场景;有向图联通性判断是社交网络分析和系统依赖检查的基础;而海岸线计算则直接对应着地理信息系统(GIS)中的边界计算需求。这三个题目虽然领域不同,但都要求我们具备将数学思维转化为高效代码的能力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 字符串迁移问题(110题)
2.1 问题重述与核心思路
题目要求实现字符串的循环迁移操作:给定一个字符串s和迁移次数k,将字符串的每个字符向右移动k位,超出长度的部分从开头继续。例如"abcde"迁移2次后变为"deabc"。
这个问题的关键在于发现迁移操作的本质是字符串的旋转。当迁移次数k等于字符串长度n时,字符串会恢复原状,因此有效迁移次数实际上是k%n。基于这个观察,我们可以将问题转化为寻找旋转点。
2.2 三种经典解法实现
方法一:暴力旋转法
python复制def rotate_string(s, k):
n = len(s)
k %= n
for _ in range(k):
s = s[-1] + s[:-1]
return s
这种方法直接模拟迁移过程,每次将最后一个字符移到最前面。时间复杂度O(kn),空间复杂度O(1)。虽然直观但不适合大规模数据。
注意:当k远大于n时,务必先取模运算,否则会出现不必要的性能损耗。
方法二:切片拼接法
python复制def rotate_string(s, k):
n = len(s)
k %= n
return s[-k:] + s[:-k]
这是Python中最优雅的实现,利用字符串切片特性。时间复杂度O(n),空间复杂度O(n)。实测在LeetCode上运行时间约24ms。
方法三:三次反转法
python复制def reverse(s, l, r):
while l < r:
s[l], s[r] = s[r], s[l]
l += 1
r -= 1
def rotate_string(s, k):
n = len(s)
k %= n
s = list(s)
reverse(s, 0, n-1)
reverse(s, 0, k-1)
reverse(s, k, n-1)
return ''.join(s)
这种方法先在整体反转,再分别反转前后两部分。时间复杂度O(n),空间复杂度O(1)。特别适合C++等需要原地操作的场景。
2.3 性能对比与适用场景
| 方法 | 时间复杂度 | 空间复杂度 | 适用场景 |
