无重复字符的最长子串

90 阅读1分钟

Java

class Solution {
    public int lengthOfLongestSubstring(String s) {
        Set<Charater> sSet = new HashSet<Character>();
        
        int n = s.length();
        
        int rk = -1
        int ans = 0;
        
        for (i = 0; i < n; ++i) {
            if (i != 0) {
                sSet.remove(s.CharAt(i +-1))
            }
            
            while (rk + 1 < n && !sSet.contains(s.CharAt(rk + 1))) {
                sSet.add(s.charAt(rk + 1));
                ++rk;
            }
            
            ans = Math.max(ans, rk - i + 1)
        }
        
        return ans;
    }
}

Golang

func max (x, y int) int {
    if x < y {
        return y
    }
    
    return x
}

func lengthOfLongestSubstring (s string) int {
    m := map[byte]int{}
    n := len(s)
    
    rk, ans := -1, 0
    
    for i := 0; i < n; i++ {
        if i != 0 {
            delete(m, s[i - 1])
        }
        
        for rk + 1 < n && m[s[rk + 1]] == 0 {
            m[s[rk + 1]]++
            rk++
        }
        
        ans = max(ans, rk - i + 1)
    }
    
    return ans
}

TypeScript

function lengthOfLongestSubstring (s: string) {
    const sSet = new Set();
    
    const length = s.length;
    
    let rk = -1;
    let ans = 0;
    
    for (let i = 0; i < length; i++) {
        if (i != 0) {
            sSet.delete(s.charAt(i -1));
        }
        
        while(rk + 1 < n && !sSet.has(rk + 1)) {
            sSet.add(s.charAt(rk + 1));
            ++rk;
        }

        ans = Math.max(ans, rk - i + 1);
    }
    
    return ans;
}