求字符串中不重复的最长子串的长度(C++,leecode)

求一个字符串中不重复的最长子串时,最简单的办法就是暴力破解法,另一种是巧妙使用指针来求解。暴力破解法虽然简单粗暴,但是效率太低,几乎不实用;后一种巧妙用指针法效率较大,但是需要对指针有较深理解。本文用代码实现的是指针法,暴力破解法有需要的可以自行根据下面思路编程。下面将分别讲解两种方法思路和指针法代码。

1.1暴力破解法思路

a1 先把字符串的所有子串全部求出,可以参考这篇博客:https://blog.youkuaiyun.com/naibozhuan3744/article/details/104150415

a2 筛选出不重复的子串,并且计算各个子串长度;

a3 找出长度最大的一个子串,然后输出该最长子串长度。

1.2指针法思路

a1 用三个整形maxLength 、start 、end 分别存储最大子串长度、子串起始位置、子串结束为止

int maxLength = 0, start = 0, end = 0, j = 0;

a2 通过一次从左到右遍历,将指针start指向子串起始位置,用i作为指针向右遍历,每移动一次,用i所在位置字符跟左边从start起始的子串依次比较,直到找到相同的为止,否则继续移动。接下来的关键是在子串中找到了这个相同的字符。

  • 如果i所在的字符跟start起始的字符,到i所在下标的子串,也就是[start,i)之间的子串中,找到了等于i所在下标的字符,也就是j下标字符&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三公子Tjq

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

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

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

打赏作者

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

抵扣说明:

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

余额充值