url
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
let lengthOfLongestSubstring = s => {
if (s === null || s.length === 0)
return -1;
let n = s.length, max = 0;
let map = new Map();
for (let i = 0, j = 0; j < n; j++) {
let c = s[j];
if (map.has(c)) {
i = Math.max(i, map.get(c));
}
max = Math.max(max, j - i + 1);
map.set(c, j + 1);
}
return max;
};
func lengthOfLongestSubstring(s string) int {
Max := func(a int, b int) int {
if a < b {
return b
} else {
return a
}
}
if len(s) == 0 {
return -1
}
n := len(s)
max := 0
m := make(map[byte]int, 0)
for i, j := 0, 0; j < n; j++ {
c := s[j]
if v, ok := m[c]; ok {
i = Max(i, v)
}
max = Max(max, j - i + 1)
m[c] = j + 1
}
return max
}
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0)
return -1;
int n = s.length();
int max = 0;
Map<Character, Integer> map = new HashMap<>();
for (int i = 0, j = 0; j < n; j++){
char c = s.charAt(j);
if (map.containsKey(c)){
i = Math.max(i, map.get(c));
}
max = Math.max(max, j - i + 1);
map.put(c, j + 1);
}
return max;
}
}