一個簡單的面試題

題目

求一個字符串中最長的、不包含重複字符的子串。面試

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

具體要求

一張紙、一支筆,手寫。 (騰訊阿里的面試好像比較喜歡這類)數組

解題思路

能夠先跟面試官確認,題中所指的字符是屬於ascii字符。設計

具體的算法實現能夠達到O(n)的複雜度,只須要創建一個隊列,讓字符串中的字符逐一入隊,在每次入隊的時候更新狀態:若是該字符 c 沒有出如今當前的隊列中(能夠用一個256的數組來標識),並根據須要更新當前最長字串的長度、起始位置;若是已經出現,則循環彈出以前入隊的元素,直到彈出更早以前入隊一個 c 爲止。指針

實際上並不須要創建一個額外的隊列,只須要一前一後兩個指針,在字符串(即字符數組)中就能實現等同的效果。code

附註

這種簡單的題目,面試官要考察的除了設計簡單的算法,另外一個重點是代碼變現能力;特別是直接在紙上寫不便塗改,所以在下筆前務必要想清楚邏輯;同時還要注意代碼風格。隊列

相關文章
相關標籤/搜索