1. 程式人生 > >Leetcode題解中級篇之陣列和字串(4)無重複字元的最長子串

Leetcode題解中級篇之陣列和字串(4)無重複字元的最長子串

題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/78/

題目描述:

給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"
輸出: 3 
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

示例 2:

輸入: "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。

示例 3:

輸入: "pwwkew"
輸出: 
3 解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。   請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。

 

思路:用雙指標來計算每次變換後,無重複連續字串長度. 用set存放當前字串已經存放的字元.ans存放最大字串長度.

n為字串長度,當搜尋到達n-1時結束(從0開始).

程式碼:

public class Solution {
    public int lengthOfLongestSubstring(String s) {
       int n =s.length();
       Set<Character> set = new HashSet();
       int i=0,j=0;
       int ans=0;
       while(i<n&&j<n){
           if(set.contains(s.charAt(j))){
                set.remove(s.charAt(i++));
            }else{
                set.add(s.charAt(j++));
                ans=Math.max(ans,j-i);
            } 
       }
       return ans;
    }
}