1. 题目背景与需求解析
这道来自贵州大学的机试题"字符移动"看似简单,却蕴含着字符串处理的经典思路。题目要求编写程序,将给定字符串中的所有字母字符顺序不变地移动到字符串前端,所有非字母字符保持原有顺序移动到字符串末尾。例如输入"a1b2c3",输出应为"abc123"。
这类题型在实际开发中非常常见,比如:
- 数据清洗时需要分离字母和数字
- 日志处理时提取关键字段
- 用户输入规范化处理
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法设计思路
2.1 双指针法实现
最优雅的解决方案是使用双指针法,时间复杂度O(n),空间复杂度O(1):
python复制def move_chars(s):
chars = list(s)
left = 0
for right in range(len(chars)):
if chars[right].isalpha():
chars[left], chars[right] = chars[right], chars[left]
left += 1
return ''.join(chars)
算法原理:
- 将字符串转为可修改的列表
- 初始化left指针指向起始位置
- right指针遍历整个字符串
- 当遇到字母时,与left位置交换并移动left指针
2.2 辅助数组法
另一种直观的实现方式,适合初学者理解:
python复制def move_chars(s):
letters = []
others = []
for char in s:
if char.isalpha():
letters.append(char)
else:
others.append(char)
return ''.join(letters + others)
这种方法虽然需要额外空间,但逻辑清晰,适合作为教学示例。
3. 关键知识点详解
3.1 字符类型判断
Python中判断字符类型的常用方法:
isalpha(): 判断是否为字母isdigit():
