【LeetCode3】-无重复字符的最长子串

实现思路

最暴力的思路是枚举子串的开始位置,然后以此开始位置枚举子串的后续长度,每个子串判断下是否有重复字符出现

  • 优化思路一:
    判断是否出现重复子串使用字符hash来记录当前该字符出现的次数
  • 优化思路二
    尝试将当前O(n^2)的时间复杂度降到O(n)的复杂度,其实在枚举的中有很多不必要的枚举,如出现来abb,那么
    abb***…等字符串都是没有意义的了

Q: 为什么不将时间复杂度降到O(nlog(n))?
A: 通常出现O(nlog(n))时间复杂度的算法一般是分治算法或者是二叉树的是算法

Q: 那么什么样的算法可以实现的是O(n)的时间复杂度呢?
A: 可以尝试使用双指针的方法

双指针算法
双指针算法通常维护的是一段区间
双指针有一个begin和end,begin通常不会超过end,所以能够保证时间复杂度是O(n)

这道题中的核心思想中关键的一点是要保证只有在不得不的情况下才移动begin指针,且begin指针始终不要超过end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实现代码

在这里插入图片描述

提交结果及分析

在这里插入图片描述

时间复杂度O(n)

猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/115178827