Skip to content

Latest commit

 

History

History
97 lines (83 loc) · 1.9 KB

3.无重复字符的最长子串.md

File metadata and controls

97 lines (83 loc) · 1.9 KB

3. 无重复字符的最长子串

url

题目

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

方法

code

js

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

go

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
}

java

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