给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
题解
提交代码
public static int lengthOfLongestSubstring(String s) {
int n = s.length(), ans = 0;
Map<Character, Integer> map = new HashMap<>();
for(int j = 0, i = 0; j < n; j++){
if (map.containsKey(s.charAt(j))) {
i = Math.max(i, map.get(s.charAt(j)));
}
ans = Math.max( j - i + 1 , ans);
map.put(s.charAt(j), j + 1);
}
return ans;
}
提交代码的思路:以一个滑动窗口来判断最长子串,用HashMap判断是否子串有重复字符,若有,则改变左窗口。以O(n)的时间复杂度和O(n)的空间复杂度得出结果。
- 其中HashMap为<Character,Integer>