一个简单的面试题

题目

求一个字符串中最长的、不包含重复字符的子串。面试

好比 abcda ,答案能够是 abcd 或者 bcda算法

具体要求

一张纸、一支笔,手写。 (腾讯阿里的面试好像比较喜欢这类)数组

解题思路

能够先跟面试官确认,题中所指的字符是属于ascii字符。设计

具体的算法实现能够达到O(n)的复杂度,只须要创建一个队列,让字符串中的字符逐一入队,在每次入队的时候更新状态:若是该字符 c 没有出如今当前的队列中(能够用一个256的数组来标识),并根据须要更新当前最长字串的长度、起始位置;若是已经出现,则循环弹出以前入队的元素,直到弹出更早以前入队一个 c 为止。指针

实际上并不须要创建一个额外的队列,只须要一前一后两个指针,在字符串(即字符数组)中就能实现等同的效果。code

附注

这种简单的题目,面试官要考察的除了设计简单的算法,另外一个重点是代码变现能力;特别是直接在纸上写不便涂改,所以在下笔前务必要想清楚逻辑;同时还要注意代码风格。队列

相关文章
相关标签/搜索