給定一個字符串?s
?,請你找出其中不含有重復字符的?最長?子串?的長度。
示例?1:
輸入: s = "abcabcbb"
輸出: 3
解釋: 因為無重復字符的最長子串是 "abc"
,所以其長度為 3。
思路:
對于長度為0的數組單獨處理
其他數組最小的可能長度為1,初始化maxlen=1
用隊列的思想:
初始時,隊首隊尾均在下標為0處,將首位元素加入列表,便于后續查找
右端一直向后移動,
沒有在隊列中找到該元素,則一直向后移動,將新元素添加到隊尾,同時更新最大長度maxlen的值
如果隊列中已經包含該元素,則移動左側,直到之前隊列中的該元素被移出隊列,然后在新位置納入該元素,繼續向下搜索
直到右端到達數組尾,結束搜索
class Solution {public int lengthOfLongestSubstring(String s) {if(s.isEmpty())return 0;int maxlen = 1;int right = 0;int left = 0;LinkedList<Character> queue = new LinkedList<>();queue.addLast(s.charAt(0));for(right = 0; right < s.length(); right++) {if(queue.contains(s.charAt(right))) {while(queue.contains(s.charAt(right))&&right!=0){queue.poll();left++;}if(right!=0){queue.addLast(s.charAt(right));}}else{queue.addLast(s.charAt(right));maxlen = Math.max(maxlen, right - left+1);}}return maxlen;}
}