[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/git-jhy/JavaArithmetic/master/src/LeetCode/LeetCode3.java [Back]  [Original]

package LeetCode;

public class LeetCode3 {

    //https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/description/
    // 
    // : O(len(s))
    // : O(len(charset))
    public int lengthOfLongestSubstring(String s) {

        int[] freq = new int[256];

        int l = 0, r = -1; //s[l...r]
        int res = 0;

        //  l == 0; r == -1 
        // l == s.size(); r == s.size()-1 
        // , freq, 
        while (l < s.length()) {
            if (r + 1 < s.length() && freq[s.charAt(r + 1)] == 0)
                freq[s.charAt(++r)]++;
            else    //r || freq[s[r+1]] == 1
                freq[s.charAt(l++)]--;

            res = Math.max(res, r - l + 1);
        }

        return res;
    }


    public int lengthOfLongestSubstring2(String s) {

        int[] freq = new int[256];

        int l = 0, r = -1; //s[l...r]
        int res = 0;

        // ,  r + 1 < s.length(), ?
        // QQ @  :)
        while( r + 1 < s.length() ){

            if( r + 1 < s.length() && freq[s.charAt(r+1)] == 0 )
                freq[s.charAt(++r)] ++;
            else    //freq[s[r+1]] == 1
                freq[s.charAt(l++)] --;

            res = Math.max(res, r-l+1);
        }

        return res;
    }
    // , 
    // : O(len(s))
    // : O(len(charset))
    public int lengthOfLongestSubstring3(String s) {

        int[] freq = new int[256];

        int l = 0, r = -1; //s[l...r]
        int res = 0;

        while(r + 1 < s.length()){

            while(r + 1 < s.length() && freq[s.charAt(r+1)] == 0)
                freq[s.charAt(++r)] ++;

            res = Math.max(res, r - l + 1);

            if(r + 1 < s.length()){
                freq[s.charAt(++r)] ++;
                assert(freq[s.charAt(r)] == 2);
                while(l 

Web Proxy Viewer  |  New URL  |  Original Page