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