題目:請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。假設字串中只包含『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個字元之前沒有...