- 二分法:循环不变量原则,只有在循环中坚持对区间的定义,才能清楚的把握循环中的各种细节。
- 双指针法:通过一个快指针和慢指针在一个 for 循环下完成两个 for 循环的工作。双指针法(快慢指针法)在数组和链表的操作中是非常常见的。
- 滑动窗口:滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将 O(n^2)的暴力解法降为 O(n)。
- 模拟行为:真正解决题目的代码都是简洁的,或者有原则性的。
- 虚拟头节点:虚拟头节点可以避免处理链表头节点与其他节点逻辑不一致的问题。
- 链表的基本操作:707 设计链表一题编写了完整的针对链表操作。
- 翻转链表:操作每个节点指针指向前一个节点位置,注意头节点处理。
- 删除倒数节点:可以通过双指针制造间隔后,实现 O(n) 删除指定的节点。
- 链表相交:使用双指针查找两个链表相交的节点。
- 环形链表:如何辨别有环,如何查找环的入口。
-
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成 ------------------------------------- 输入:strs = ["flower","flow","flight"] 输出:"fl" ------------------------------------- 输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
- 解题思路:选中第一个字符串为模版比对其他字符串同一偏移字符是否一致:
- 其他字符串长度结束,返回当前相同长度的子字符串;
- 其他字符串中有不同的字符;
- 所有第一个字符串的字符比对结束。
- 解题思路:选中第一个字符串为模版比对其他字符串同一偏移字符是否一致: