day 9 | ●字符串总结 ●双指针回顾

第四章 字符串part02
今日任务

●缺 KMP 算法
●字符串总结
●双指针回顾

字符串总结

概念:什么是字符串,可以将其理解成字符数组,在C++/Java 中被封装成 string 类,
双指针是字符串题目的常用解法,首先从快慢指针到头尾指针的掌握,十分考验代码能力。
以下是以往使用双指针完成字符串的题目

双指针回顾

此时我们已经做过10到双指针的题目了,来一起回顾一下,大家自己也总结一下双指针的心得

  • 反转字符串:使用头尾指针,一块向中间元素移动进行逐一反转
  • 替换空格: 先将数组扩容到目标结果的容量,然后从后向前的逐一赋值,不可以从前向后,因为这样的时间复杂度为O(n ^ 2)
  • 移除元素:使用快慢指针,快指针负责寻找不需要删除的元素,慢指针负责赋值
    翻转字符串里的单词:删除冗余空格,进行整体反转,再进行局部反转(逐个单词的反转)

链表相关:
反转链表:逐一的从头指针开始将节点的指向反转。即只需改变链表的next指针的指向,直到链表的反转

环形链表:因为要证明是否是环形链表,可以使用快慢指针,只要两个指针相遇的情况下,则一定是环形链表。有一个非常重要的数学知识点是:当快慢指针相遇时,快指针到入口的距离 = 头指针到入口的距离

几数之和相关:
我们使用哈希法来解决了两数之和,那么三数之和、四数之和呢?使用哈希法解决后两种情况是比较复杂冗余的。建议我们使用双指针的方法来解决。
三数之和:先对数组进行排序,去重,定义 a = 0 ,b = a + 1, c = nums.length - 1; 找到后去重 b , c

四数之和:在三数之和的基础上再套一层 for 循环,a = 0,b = a + 1, c = b + 1, d = nums.length - 1;

总结:一般使用双指针来解决问题的话,可以将时间复杂度 从 O(n ^ 2) 降为 O (n);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java编程小辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值