给定一个字符串 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;}
}