1. 字符串操作基础与双指针技巧
字符串处理是算法面试中的高频考点,而双指针技巧则是解决这类问题的利器。在实际开发中,字符串反转、替换等操作也经常出现在数据处理、文本解析等场景中。
1.1 字符串与数组的关系
字符串本质上是一个字符数组,在Java中表现为char[]。理解这一点很重要,因为这意味着我们可以使用数组操作来处理字符串问题。例如:
java复制String s = "hello";
char[] chars = s.toCharArray(); // 转为字符数组
这种转换让我们能够利用数组的随机访问特性(O(1)时间复杂度访问任意元素),这在处理字符串问题时非常有用。
1.2 双指针法的核心思想
双指针法通过维护两个指针(通常是索引)来协同工作,常见的有以下几种模式:
- 对向指针:一个指针从起始位置开始,另一个从末尾开始,向中间移动(如反转字符串)
- 同向快慢指针:两个指针从同一端出发,以不同速度移动(如删除重复元素)
- 滑动窗口:维护一个窗口,通过调整左右指针来满足特定条件
提示:在处理字符串/数组问题时,先思考是否可以用双指针法,这通常能带来O(n)时间复杂度的解决方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 字符串反转问题详解
2.1 简单反转(344题)
这是最基本的反转问题,要求原地修改输入数组。双指针解法如下:
java复制public void reverseString(char[] s) {
int left = 0, right = s.length - 1;
while (left < right) {
// 交换左右指针指向的字符
char temp = s[left];
s[left] = s[right];
s[right] = temp;
// 移动指针
left++;
right--;
}
}
时间复杂度分析:O(n),其中n是字符串长度。我们只需遍历一半的数组。
空间复杂度:O(1),只使用了常数级别的额外空间。
2.2 进阶反转(541题)
这个问题增加了
