1. 程式人生 > >無重複字元的最長字串

無重複字元的最長字串

給定一個字串,找出不含有重複字元的最長字串的長度

示例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,那麼我們將會更新無重複字元字串最大長度的答案。

  1. 為了列舉給定字串的所有子字串,我們需要列舉它們開始和結束的索引。假設開始和結束的索引分別為i和j。那麼我們有0<=i<j<=n(這裡的結束索引j是按慣例排除的)。因此,使用i從0到n-1以及從i+1到n這兩個巢狀的迴圈,我們可以枚舉出所有的子字串。
  2. 要檢查一個字串是否含有重複字元,我們可以使用集合。我們遍歷字串中的所有字元,並請將他們逐個放入set中。在放置一個字元之前,我們檢查該集合是否已經包含它,如果包含我們會返回false。迴圈結束後,我們返回true。