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 StringFirst Unique Character in a String 是字符串面试的基础分,建议你做到:

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

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

相关推荐
weixin_402486343 小时前
小分子 pdb准化为sdf
python
橘子编程3 小时前
密码学完全指南:从基础到实战
java·python·密码学
ZC跨境爬虫3 小时前
海南大学交友平台开发实战 day9(头像上传存入 SQLite+BLOB 存储 + 前后端联调避坑全记录)
前端·数据库·python·sqlite
FreakStudio3 小时前
嘉立创开源:应该是全网MicroPython教程最多的开发板
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy
上天_去_做颗惺星 EVE_BLUE3 小时前
接口自动化测试全流程:pytest 用例收集、并行执行、Allure 报告合并与上传
python·pytest
chushiyunen3 小时前
python fastapi使用、uvicorn
开发语言·python·fastapi
咕白m6253 小时前
Python 高效添加与管理 Excel 工作表
后端·python
pixle04 小时前
【 LangChain v1.2 入门系列教程】【四】结构化输出,让 Agent 返回可预测的结构
python·ai·langchain·agent·智能体
木心术14 小时前
openclaw与Hermes的优劣势对比
人工智能·python·opencv·自动化