Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc"
, with the length of 3.
Example 2:
Input: "bbbbb"
Output: 1
Explanation: The answer is "b"
, with the length of 1.
Example 3:
Input: "pwwkew"
Output: 3
Explanation: The answer is "wke"
, with the length of 3.
Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
求最长不含重复字符字串,双指针,求最大两相同字符的距离即可。时间复杂度O(n),空间复杂度O(n)。题目没说一定全是字母所以不能使用256长度数组替代map,如果可以时间复杂度是O(1)。
class Solution { public int lengthOfLongestSubstring(String s) { if (s == null || s.length() <= 0) return 0; Map<Character, Integer> map = new HashMap<>(); int ret = 0; for (int i=0,j=0; i<s.length(); i++) { char ch = s.charAt(i); if (map.containsKey(ch)) { j = Math.max(j, map.get(ch) + 1); } ret = Math.max(ret, i-j+1); map.put(ch, i); } return ret; } }