字符串总结
- 双指针法:反转字符串、删除元素。
- 反转系列:反转系列上有很多不同的玩法,可以在for循环上下文章,也可以整体反转再局部反转。
- KMP:当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。
双指针法总结
- 数组篇:原地移除数组上的元素,用快慢指针。
- 字符串篇:
① 反转字符串:定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素;
② 替换空格:首先扩充数组到每个空格被替换后的大小,然后双指针从后向前替换空格。
③ 删除冗余空格:仍然只用快慢指针,同时要注意单词间保留一个空格以及字符串前后空格的判断。 - 链表篇:
① 反转链表:利用双指针,需要改变链表的next指针的指向,直接将链表反转 ,而不用重新定义一个新的链表。
② 环形链表:使用快慢指针(双指针法),分别定义 fast 和 slow指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。 - N数之和:使用了哈希法解决了两数之和,但是哈希法并不使用于三数之和!多数之和用双指针才是最合适的,通过前后两个指针不算向中间逼近,在一个for循环下完成两个for循环的工作,但需要注意去重的操作!