初版代码:(消耗性能较大)
class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); int left = -1; int ans = 0; if(s.isEmpty()) return 0; if(n == 1) return 1; HashMap<Character, Integer> map = new HashMap<>(); int firstIndex = 0; for (int i = 0; i < n; i++) { if(map.containsKey(s.charAt(i))){//保证数据的唯一性 int index = map.get(s.charAt(i)); int temp = index; while(index >= firstIndex && map.containsValue(index)){ map.remove(s.charAt(index--)); } firstIndex = temp; } map.put(s.charAt(i), i); ans = Math.max(ans, map.size()); } return ans; } }
优化代码:(性能优化版)
class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); int left = -1; int ans = 0; HashSet<Character> set = new HashSet<>();//Set集合保证数据的唯一性 for (int i = 0; i < n; i++) { if (i != 0){ set.remove(s.charAt(i - 1)); } while (left + 1 < n && !set.contains(s.charAt(left + 1))){ set.add(s.charAt(left + 1)); left++; } ans = Math.max(ans, left - i + 1); } return ans; } }
原文:https://www.cnblogs.com/tqw1215/p/13356936.html