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 岗算法面试会稳很多。

相关推荐
七颗糖很甜18 小时前
电离层对地基雷达测量精度的影响分析与校正方法
python
AC赳赳老秦18 小时前
知识产权辅助:用 OpenClaw 批量生成专利交底书 / 软著申请材料,自动校验格式与内容合规性
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
小熊Coding19 小时前
Python2D射击冒险闯关游戏2.0版本
python·pygame
FYKJ_201019 小时前
springboot校园兼职平台--附源码02041
java·javascript·spring boot·python·eclipse·django·php
yanghuashuiyue21 小时前
Deep Agents 框架-CLI
python·langchain·langgraph·deepagents
Zik----21 小时前
DAEFR (ICLR 2024)— 盲脸超分模型解读
人工智能·python·高光谱图像·光谱恢复
头发够用的程序员1 天前
C++和Python面试经典算法汇总(一)
开发语言·c++·python·算法·容器·面试
夜猫逐梦1 天前
【逆向经验】一篇文章讲透为什么CE搜不到Python游戏的内存值
开发语言·python·游戏
Zik----1 天前
CILP模型讲解
人工智能·python·多模态
陈eaten1 天前
汇编使用AES指令集实现AES解密
汇编·python·aes解密·aes指令集