無重複字元的最長字串
阿新 • • 發佈:2018-12-10
給定一個字串,找出不含有重複字元的最長字串的長度
示例1:
輸入: "abcabcbb"
輸出: 3
解釋: 無重複字元的最長子串是 "abc",其長度為 3。
示例2:
輸入: "bbbbb"
輸出: 1
解釋: 無重複字元的最長子串是 "b",其長度為 1。
示例3:
輸入: "pwwkew"
輸出: 3
解釋: 無重複字元的最長子串是 "wke",其長度為 3。
請注意,答案必須是一個子串,"pwke" 是一個子序列 而不是子串。
解決方案:
方法一:暴力法(最方便,最通俗,最容易理解,最符合正常人的思維)
思路:逐個檢查所有的字串,看它是否不含有重複的字元
演算法:假設我們有一個函式boolean allUnique(String subString),如果子字串的字元都是唯一的,它會返回true,否則會返回false。我們可以遍歷給定字串s的所有可能的子字串並呼叫函式allUnique。如果事實證明返回值為true,那麼我們將會更新無重複字元字串最大長度的答案。
- 為了列舉給定字串的所有子字串,我們需要列舉它們開始和結束的索引。假設開始和結束的索引分別為i和j。那麼我們有0<=i<j<=n(這裡的結束索引j是按慣例排除的)。因此,使用i從0到n-1以及從i+1到n這兩個巢狀的迴圈,我們可以枚舉出所有的子字串。
- 要檢查一個字串是否含有重複字元,我們可以使用集合。我們遍歷字串中的所有字元,並請將他們逐個放入set中。在放置一個字元之前,我們檢查該集合是否已經包含它,如果包含我們會返回false。迴圈結束後,我們返回true。