3 无重复字符的最长子串
题目:
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
思路:滑动窗口法
想象一个窗口,当abc进入窗口后,无重复字符,目前最长子串长度为3.当后一个a进入后,变成了abca出现了重复字符a。所以要将窗口进行滑动,以满足要求。如何滑动?将队列左边的元素移除即可。一直维持这样的队列,直到找出最长长度。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public int lengthOfLongestSubstring(String s) { if(s.length() == 0) return 0; HashMap<Character, Integer> map = new HashMap<Character, Integer>(); int max = 0; int left = 0; for(int i = 0; i < s.length(); i++){ if(map.containsKey(s.charAt(i))) left = Math.max(left, map.get(s.charAt(i))+ 1); map.put(s.charAt(i),i); max = Math.max(max,i-left+1); } return max; }
|