求一個字符串中最長的、不包含重複字符的子串。面試
好比 abcda
,答案能夠是 abcd
或者 bcda
。算法
一張紙、一支筆,手寫。 (騰訊阿里的面試好像比較喜歡這類)數組
能夠先跟面試官確認,題中所指的字符是屬於ascii字符。設計
具體的算法實現能夠達到O(n)的複雜度,只須要創建一個隊列,讓字符串中的字符逐一入隊,在每次入隊的時候更新狀態:若是該字符 c 沒有出如今當前的隊列中(能夠用一個256的數組來標識),並根據須要更新當前最長字串的長度、起始位置;若是已經出現,則循環彈出以前入隊的元素,直到彈出更早以前入隊一個 c 爲止。指針
實際上並不須要創建一個額外的隊列,只須要一前一後兩個指針,在字符串(即字符數組)中就能實現等同的效果。code
這種簡單的題目,面試官要考察的除了設計簡單的算法,另外一個重點是代碼變現能力;特別是直接在紙上寫不便塗改,所以在下筆前務必要想清楚邏輯;同時還要注意代碼風格。隊列