給定乙個字串,請找出其中無重複字元的最長子字串。例如,在"abcabcbb"中,最長無重複子串為"abc",其長度為3。在"pwwkew",最長無重複子串為"wke",其長度為3。注意是是子串,"pwke"是子串行而不是子串。leetcode
首先試了試暴力搜尋,遍歷一次字串,遍歷過程中,對每個字元都有乙個 o(n^2)的處理時間,因為需要遍歷該字元之後的字串,對每個字元,需要和已有的子串相比較,如果不重複,則加入子串,不然就遍歷下乙個字元。加起來時間複雜度為 o(n^3)。
int lengthoflongestsubstring(string s)
}return maxlength;
}bool allunique(string s, int start, int end)
return true;
}複製**
這類問題應該學會分析結果的特點,比如說前面的最長回文子串,是利用了回文串的對稱性,那麼無重複子串呢,想到無重複,可以想到可以使用 hash,當新的字元來了,有衝突,就說明前面是有重複的。 演算法思想:兩次迴圈得到所有的子串,用 hash 判斷是否重複。
**中需要注意的地方:
sliding window方法就是使用了動態規劃+hashset。首先理解,動態規劃演算法的思想,將問題分解為子問題的解,找到重疊子問題和最優子結構,對需要重複計算的結果進行儲存。而使用了hashset之後,重疊子問題操作可以簡單很多,只需要 2n 步就能得出結果。
int lengthoflongestsubstring(string s) else
}return maxlength;
}複製**
使用hashmap和ascii 最長無重複子串
examples given abcabcbb the answer is abc which the length is 3.given bbbbb the answer is b with the length of 1.given pwwkew the answer is wke with t...
最長無重複子串
最長無重複子串 兩種思路 一種是暴力解法 一種是動態規劃 package merchant public class maxnorepeat int record 0,maxlen 1,index 0 for int i 1 ilength i else len if maxlenreturn s....
leetcode 求最長無重複子串
1.求最長無重複子串 給定乙個字串,找出不含有重複字元的最長子串的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是 子串行 而...