Leetcode題解中級篇之陣列和字串(4)無重複字元的最長子串
阿新 • • 發佈:2018-12-27
題目描述:
給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 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; } }