标签:字符串

数据结构与算法刷题之【字符串】篇

<p>汇总字符串相关的数据结构与算法刷题笔记,涵盖字符串反转、替换、KMP匹配等经典题型,结合剑指offer与力扣题目讲解双指针、哈希与字符串处理技巧及Java实现。</p>

数据结构与算法刷题之【滑动窗口】篇

<p>汇总滑动窗口相关的数据结构与算法刷题笔记,讲解窗口扩张与收缩的通用模板,涵盖无重复字符的最长子串、最小覆盖子串等经典题型并给出Java实现与复杂度分析。</p>

LeetCode 17. 电话号码的字母组合(DFS回溯)

<p>本文讲解 LeetCode 第 17 题「电话号码的字母组合」,将数字 2-9 映射为字母并求所有组合。使用递归回溯逐层枚举每组字母,并通过 StringBuilder 优化字符串拼接与撤销,给出完整 Java 代码与复杂度分析。</p>

leetcode【哈希表—简单】242.有效的字母异位词

<p>本文讲解 LeetCode 242 有效的字母异位词,判断两个字符串是否互为字母异位词。文章给出题目描述和调试代码,先分析会超时的暴力法,再重点介绍用长度为 26 的数组统计字符次数的哈希法,并给出多种 Java API 与 stream 的优化写法。</p>

leetcode【哈希表—简单】383.赎金信

<p>本文记录 LeetCode 383 赎金信的判断方法,要求赎金信字符串能由杂志字符串中的字符构成。文章给出题目描述与调试代码,利用仅含小写字母的特点,用长度 26 的数组统计杂志字符次数,再遍历赎金信逐个抵消完成校验。</p>

leetcode【字符串—简单】344.反转字符串

<p>本文讲解 LeetCode 344 反转字符串,要求在 O(1) 额外空间下原地反转字符数组。文章给出题目描述与调试代码,介绍使用左右双指针边交换边向中间靠拢的解法,并额外列举了临时变量、位运算、加减法三种字符交换写法。</p>

leetcode【字符串—简单】541.反转字符串 II

<p>本文记录 LeetCode 541 反转字符串 II 的解法,要求每 2k 个字符反转前 k 个,并正确处理末尾不足 k 个或不足 2k 个的情况。文章给出题目描述与调试代码,介绍按 2k 步长循环并封装 reverse 方法完成指定区间反转。</p>

leetcode【剑指 Offer 05. 替换空格—简单】替换空格

<p>本文讲解剑指 Offer 05 替换空格,需把字符串中的每个空格替换成 %20。文章给出题目描述与调试代码,对比 O(n²) 的逐次移动填充,重点介绍先扩容再使用左右双指针从后往前填充的 O(n) 最优解法。</p>

leetcode【字符串—中等】151.翻转字符串里的单词

<p>本文记录 LeetCode 151 翻转字符串里的单词,要求反转单词顺序并去掉多余空格。文章给出题目描述与调试代码,介绍 StringBuilder 拼接、纯字符数组从后往前填充,以及原地整体反转加二次反转移位的 O(1) 空间三种解法。</p>

leetcode【字符串—简单】剑指 Offer 58.左旋转字符串

<p>本文讲解剑指 Offer 58 左旋转字符串,需把字符串前 n 个字符转移到尾部。文章给出题目描述与调试代码,介绍整体反转后再分段反转的原地解法、新数组填充解法,并分析借助 substring 与 StringBuilder 效率更高的原因。</p>

leetcode【字符串—简单】28.实现 strStr()

<p>本文记录 LeetCode 28 实现 strStr() 的解法,要求在 haystack 中查找 needle 首次出现的下标。文章给出题目描述与调试代码,先分析会超时的暴力匹配,再重点讲解 KMP 算法构建 next 前缀表并进行最长前后缀匹配的 O(m+n) 过程。</p>

leetcode【字符串—简单】459.重复的子字符串

<p>本文讲解 LeetCode 459 重复的子字符串,判断字符串能否由其子串重复多次构成。文章给出题目描述与调试代码,介绍整除比较法、KMP 利用 next 数组末尾值判断、去重整除优化,以及拼接后去头去尾的巧妙两行解法。</p>

leetcode【栈与队列—简单】20.有效的括号

<p>本文讲解 LeetCode 20 有效的括号,判断只含括号的字符串是否合法闭合。文章给出题目描述与调试代码,介绍遇到左括号就压入对应右括号、遇到右括号再与栈顶匹配的栈解法,并说明栈为空或栈顶不匹配时直接判定失败。</p>

leetcode【栈与队列—中等】150.逆波兰表达式求值

<p>本文讲解 LeetCode 150 逆波兰表达式求值,根据后缀表达式计算整数结果。文章给出题目描述与调试代码,介绍遇到数字入栈、遇到运算符弹出两个数运算后再入栈的栈解法,并提醒减法和除法要区分操作数的先后顺序。</p>