演算法面試 最長不含重複字元的子字串

2021-10-01 18:08:52 字數 787 閱讀 1290

題目:請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。假設字串中只包含『a』-『z』的字元。

解題思路:我麼們可以用動態規劃的方法來進行思考。首先定義函式f(i)表示以第i個字元為結尾的不包含重複字元的子字串的最長長度。我們從左到右逐一掃瞄字串中的每個字元。當我們計算以第i個字元為結尾的不包含重複字元的子字串的最長長度f(i)時,我們已經得到f(i-1)了。

如果第i個字元之前沒有出現過,那麼f(i) = f(i-1) + 1。如果第i個字元之前已經出現過,那我們就要先計算第i個字元和它上次出現在字串中的位置的距離,並記為d,接著分兩種情形分析。第一種情形是d小於或者等於f(i-1),此時第i個字元上次出現在f(i-1)對應的最長子字串之中,所以f(i) = d。第二種情況是d大於f(i-1),此時第i個字元上次出現在f(i-1)對應的最長子字串之前,所以f(i) = f(i-1) + 1。

接下來我們用c++來進行程式設計:

int

longestsubstringwithoutduplication

(const std::string& str)

position[str[i]

-'a'

]= i;}if

(curlength > maxlength)

maxlength = curlength;

delete

position;

return maxlength;

}

LeetCode 最長不含重複字元的子字串

請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew ...

最長不含重複字元的子字串

題目 輸入乙個字串,找出字串中最長的不含重複字元的子字串,計算該子字串的長度。假設字串中的字元為 a z 例如 arabcacfr 最長的字串為 rabc 和 acfr 長度為 4 int find max len string str else dp str i a i return max le...

最長不含重複字元的子字串

題目 請從字串中找出乙個最長的不包含重複字元的子 字串,計算該最長子字串的長度。假設字串中只包 含 a z 的字元。例如,在字串 arabcacfr 中,最長的不含重複字元 的子字串是 acfr 長度為 4。分析 f i 表示第i個字元為結尾的不包含重複字元的子字串的最大長度。如果第i個字元之前沒有...