作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
给定一个长度为N
的字符串S
,找到最长的没有重复字符的子串。
示例:
输入:“计算器”
输出:“stackoverfl”
如果有两个这样的候选人,从左边第一个返回。我需要线性时间和常数空间算法。
最佳答案
您将需要一个开始和结束定位器(/指针)字符串和一个数组,用于存储每个字符的信息:它至少出现过一次吗?
从字符串的开头开始,两个定位器都指向字符串的开头。
将结束定位器向右移动直到找到重复(或到达字符串的末尾)。对于每个处理过的字符,将其存储在数组中。如果这是最大的子串,停止时存储位置。还要记住重复的字符。
现在在处理时对开始定位器做同样的事情每个字符,从数组中删除其标志。将定位器移动到你会发现重复字符的较早出现。
如果您还没有到达字符串的末尾,请返回第 3 步。
总体:O(N)
关于string - 查找不重复字符的最长子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9734474/
我是一名优秀的程序员,十分优秀!