# LeetCode - 3. Longest Substring Without Repeating Characters

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;
}
}

posted @ 2018-09-13 16:16  Pickle  阅读(190)  评论(0编辑  收藏  举报