2018-12-25

问题列表

问题与反馈

总结与收获

要检查一个字符是否已经在子字符串中,我们可以检查整个子字符串,这将产生一个复杂度为 O(n^2)的算法,但我们可以做得更好。通过使用 HashSet 作为滑动窗口,我们可以用 O(1)的时间来完成对字符是否在当前的子字符串中的检查。

滑动窗口是数组/字符串问题中常用的抽象概念。 窗口通常是在数组/字符串中由开始和结束索引定义的一系列元素的集合,即 [i, j)(左闭,右开)。而滑动窗口是可以将两个边界向某一方向“滑动”的窗口。例如,我们将 [i, j)向右滑动 1个元素,则它将变为 [i+1, j+1)[i+1,j+1)(左闭,右开)。

回到我们的问题,我们使用 HashSet 将字符存储在当前窗口 [i, j)[i,j)(最初 j = ij=i)中。 然后我们向右侧滑动索引 j,如果它不在 HashSet 中,我们会继续滑动 j。直到 s[j] 已经存在于 HashSet 中。此时,我们找到的没有重复字符的最长子字符串将会以索引 i 开头。如果我们对所有的 i 这样做,就可以得到答案。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数据类型转换 1.string 将一个数据类型强制转换为其他的数据类型 类型转换主要指,将其他数据类型,转为 st...
    FeistyFei阅读 270评论 0 0
  • LeetCode 87. Scramble String Description Given a string s...
    ruicore阅读 218评论 0 0
  • 今天起床:6:00昨天就寝:01:20天气:阴心情:还不错纪念日:祝大家圣诞节快乐✌️ 今日金句:种一棵树最好的时...
    搬砖的小姐姐阅读 299评论 0 0
  • ORM 对象关系映射(ORM),用于实现面向对象编程里不同类型系统的数据之间的转换。换句话说,就是用面向对象的方式...
    Karl_2c80阅读 214评论 0 0
  • 一棵树的光影
    杨等等阅读 223评论 0 1

友情链接更多精彩内容