Python面试30分钟突击掌握-LeetCode2-Strings

如果你正在准备 Python 开发岗面试,而且希望在短时间内稳定拿分,这篇字符串专题你可以直接拿去复习。

上一篇我们练了 Array,这一篇进入 Strings。

字符串题目看起来"像语文题",但面试官考察的依旧是同一套核心能力:

  • 能不能快速识别题目模型;
  • 能不能写出简洁、可靠的代码;
  • 能不能把复杂度讲清楚;
  • 能不能处理边界条件和追问。

为什么 Strings 是面试高频?

字符串是业务开发中的常客:日志处理、接口参数校验、文本匹配、数据清洗都离不开它。

所以在 Python 面试里,Strings 题目出现频率非常高,而且经常作为热身题或第一题。

如果你只有 30 分钟,建议优先吃透下面两题:

  • Reverse String
  • First Unique Character in a String

这两题分别代表了字符串中的两种基础能力:

  • 双指针原地处理
  • 哈希统计与二次遍历定位

今天的突击目标

不要贪多,先把这四件事做到位:

  • 不看答案,能独立写出 AC;
  • 复杂度分析能脱口而出;
  • 能说明"为什么这样做是最合适的";
  • 能主动提到常见坑点和边界情况。

题目一:Reverse String(反转字符串)

题目描述

给你一个字符数组 s,请你将其反转。

要求你必须原地修改 输入数组,并且只使用 O(1) 的额外空间。

示例:

  • 输入:["h","e","l","l","o"],输出:["o","l","l","e","h"]
  • 输入:["H","a","n","n","a","h"],输出:["h","a","n","n","a","H"]

面试中的思考路径

不少同学会先想到 s[::-1],这在 Python 里很常见,但它会创建新对象。

题目明确要求 in-place(原地),所以要用双指针交换:

  • left 从头开始;
  • right 从尾开始;
  • 每轮交换后分别向中间移动;
  • 当 left >= right 时结束。

Python 参考实现

python 复制代码
from typing import List


class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        不返回任何值,直接在原数组上修改。
        """
        left, right = 0, len(s) - 1
        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1

复杂度分析

  • 时间复杂度:O(n),每个元素最多参与一次交换;
  • 空间复杂度:O(1),只使用常数个额外变量。

面试易错点

  • 用切片或 reversed() 生成新列表,不满足原地修改要求;
  • 忘记说明为什么是 O(1) 空间;
  • 指针边界条件写错(例如 <= 与 < 混淆)。

题目二:First Unique Character in a String(字符串中的第一个唯一字符)

题目描述

给定一个字符串 s,找到它的第一个不重复字符,并返回它的索引。

如果不存在,返回 -1。

示例:

  • 输入:"leetcode",输出:0
  • 输入:"loveleetcode",输出:2
  • 输入:"aabb",输出:-1

面试中的思考路径

这题最稳妥的方式是"两次遍历 + 哈希计数":

  1. 第一次遍历:统计每个字符出现次数;
  2. 第二次遍历:按原字符串顺序找第一个计数为 1 的字符。

为什么要两次?

因为"第一个唯一字符"强调的是顺序,光统计次数还不够,必须回到原序列中定位。

Python 参考实现

python 复制代码
class Solution:
    def firstUniqChar(self, s: str) -> int:
        freq = {}
        for ch in s:
            freq[ch] = freq.get(ch, 0) + 1

        for i, ch in enumerate(s):
            if freq[ch] == 1:
                return i
        return -1

复杂度分析

  • 时间复杂度:O(n),两次线性遍历,仍是线性级别;
  • 空间复杂度:O(k),k 为字符集大小。若限定为小写字母,可视为常数级。

面试易错点

  • 统计完次数后直接返回某个字符,而不是索引;
  • 用 set 去重导致顺序信息丢失;
  • 没有处理"全部重复"的情况,漏掉返回 -1。

30 分钟高效练习法(Strings 版)

你可以按这个节奏执行:

  1. 5 分钟:先口述两题思路,不写代码;
  2. 10 分钟:手写代码并自测示例;
  3. 10 分钟:补上复杂度、边界条件、易错点;
  4. 5 分钟:模拟面试表达,尽量脱稿复述。

重点不是"写完",而是"讲清楚你为什么这么写"。


面试表达模板

你可以这样说:

这题我会先判断是否需要保留原顺序。

如果需要保序并且要快速查询,我会考虑哈希表做计数或索引映射。

在复杂度上,我目标是时间 O(n),空间根据题目约束尽量控制在 O(1) 或可接受范围。

写完后我会重点检查边界:空串、全重复、单字符、重复字符位置等。

这段话对大部分字符串基础题都适用,能显著提升你的表达质量。


小结

Strings 题目的本质并不"玄学",核心还是数据结构与遍历策略。
Reverse String 和 First Unique Character in a String 是字符串面试的基础分,建议你做到:

  • 代码熟练到能一遍写对;
  • 复杂度分析不用停顿;
  • 面试官追问时能解释设计取舍;
  • 能清楚指出这题常见的错误写法。

下一篇你可以继续练 Linked List,把"数组 + 字符串 + 链表"这三块基础打牢,Python 岗算法面试会稳很多。

相关推荐
外收内放5 分钟前
08 | 优化篇③ 60 张动作立绘和 50 张特效贴图是怎么进游戏的
python·游戏·pygame
计算机毕业编程指导师18 分钟前
【计算机毕设推荐】基于Hadoop+Django的LLM多维度性能评估分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·django·毕业设计·课程设计·llm性能
AC赳赳老秦22 分钟前
OpenClaw 与 FineBI 联动方案:公开数据自动采集与实时业务分析看板实践
大数据·开发语言·python·php·finebi·deepseek·openclaw
计算机毕业编程指导师33 分钟前
【Python毕设选题推荐】基于Hadoop+Django的奥斯卡奖获奖数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·毕业设计·课程设计·奥斯卡奖
风早爽太34 分钟前
Python 学习笔记:数据库迁移工具 ‌Alembic
数据库·python·fastapi·alembic
外收内放37 分钟前
06 | 优化篇① 游戏改名《鳞光纪》了:这次翻新,把“脸“全换了
python·游戏·pygame
计算机毕业编程指导师40 分钟前
【大数据毕设选题】基于Spark的电信网络诈骗话术语义特征挖掘分析系统源码 毕业设计 选题推荐 数据分析 机器学习 深度学习
大数据·hadoop·python·spark·毕业设计·课程设计·网络诈骗
for_ever_love__1 小时前
电商订单数据清洗实战——Pandas 处理缺失值、重复单与异常金额
python·数据分析·pandas·数据清洗
计算机毕业编程指导师1 小时前
计算机大数据毕设怎么选?基于Spark的个体肥胖健康风险评估的数据分析与可视化系统带你通关 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·肥胖风险
坤坤子吖1 小时前
Python基础语法学习:函数
开发语言·笔记·python·学习