1. 字符串处理中的前导星号问题解析
字符串操作是编程中最基础却最容易出错的环节之一。最近在代码审查中,我发现不少同事在处理带有前导星号的字符串时,总是采用各种复杂的正则表达式或多次字符串切割。实际上,这类问题有更优雅的解法。以"example"这样的字符串为例,我们需要将星号移到末尾变成"example",这个看似简单的需求背后涉及字符串遍历、边界条件处理等关键技术点。
在日志处理、数据清洗和文本规范化等场景中,这类操作尤为常见。比如处理用户输入的标签时("urgent"需要转为"urgent"),或是整理不规范的文件命名时("report.txt"需转为"report.txt")。理解其核心原理,能帮助我们写出更健壮的代码。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法设计与实现路径
2.1 双指针原地操作法
最直接的思路是使用双指针遍历字符串。左指针定位第一个非星号字符,右指针从末尾向前扫描,找到合适位置后交换字符。这种方法时间复杂度O(n),空间复杂度O(1),适合内存敏感的场景。
python复制def move_stars(s):
chars = list(s)
left = 0
right = len(chars) - 1
while left <= right:
if chars[left] == '*':
# 找到右边第一个非星号位置
while right > left and chars[right] == '*':
right -= 1
if right > left:
chars[left], chars[right] = chars[right], chars[left]
left += 1
return ''.join(chars)
注意:当字符串全为星号时,此方法会陷入死循环,需额外添加终止条件检查。
2.2 计数重构法
另一种思路是先统计星号数量,然后重构字符串。这种方法代码更简洁,但需要额外空间:
python复制def move_stars(s):
st
