题目
求一个字符串中最长的、不包含重复字符的子串。
比如 abcda
,答案可以是 abcd
或者 bcda
。
具体要求
一张纸、一支笔,手写。 (腾讯阿里的面试好像比较喜欢这类)
解题思路
可以先跟面试官确认,题中所指的字符是属于ascii字符。
具体的算法实现可以达到O(n)的复杂度,只需要建立一个队列,让字符串中的字符逐一入队,在每次入队的时候更新状态:如果该字符 c 没有出现在当前的队列中(可以用一个256的数组来标识),并根据需要更新当前最长字串的长度、起始位置;如果已经出现,则循环弹出之前入队的元素,直到弹出更早之前入队一个 c 为止。
实际上并不需要建立一个额外的队列,只需要一前一后两个指针,在字符串(即字符数组)中就能实现等同的效果。
附注
这种简单的题目,面试官要考察的除了设计简单的算法,另一个重点是代码变现能力;特别是直接在纸上写不便涂改,因此在下笔前务必要想清楚逻辑;同时还要注意代码风格。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。