1. LeetCode 482题解析:车牌号格式化
这道题目看似简单,但实际处理起来有不少细节需要注意。题目要求我们对给定的车牌号字符串进行重新格式化,使其符合特定的分组规则。作为一名经常刷题的开发者,我发现这类字符串处理题目在实际面试中出现频率很高,特别是对边界条件的处理能力考察很严格。
题目给出的示例是这样的:输入字符串"5F3Z-2e-9-w"和k=4,输出应为"5F3Z-2E9W"。也就是说,我们需要:
- 移除所有原有的连字符
- 将所有字母转为大写
- 从字符串末尾开始,每隔k个字符插入一个连字符
- 第一组字符数量可以少于k个
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路详解
2.1 基础处理步骤
首先我们需要对原始字符串进行预处理:
- 使用toUpperCase()将所有字母转为大写
- 使用replace()方法移除所有连字符
这个预处理步骤很关键,它简化了后续的操作。在实际编码中,我建议先将这两个操作合并成一行,这样代码更简洁:
java复制String str = S.toUpperCase().replace("-","");
2.2 反向遍历技巧
这道题最巧妙的地方在于从字符串末尾开始处理。为什么要这样做?因为从末尾开始可以更方便地控制分组:
- 创建一个StringBuilder来构建结果字符串
- 从字符串末尾开始遍历
- 每添加k个字符就插入一个连字符
- 最后将结果反转
这种反向处理的方法避免了正向处理时第一组长度不确定的问题。我在实际编码时发现,正向处理需要考虑很多边界条件,而反向处理则简单明了。
2.3 计数器使用
我们需要一个计数器来跟踪已处理的字符数:
java复制int counter = 0;
每处理一个字符,计数器加1。当计数器达到k的倍数时,插入一个连字符。但要注意最后一个字符后面不能加连字符,所以需要添加条件判断i!=0。
3. 完整代码实现
java复制class Solution {
public String licenseKeyFormatting(String S, int K) {
// 预处理:转大写并移除所有连字符
final String str = S.toUppe
