Skip to content

Latest commit

 

History

History
88 lines (70 loc) · 2 KB

File metadata and controls

88 lines (70 loc) · 2 KB

##Longest Substring Without Repeating Characters

26% Accepted Given a string, find the length of the longest substring without repeating characters.

Example
For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3.

For "bbbbb" the longest substring is "b", with the length of 1.

####Challenge -O(n) time

####Tags Expand

  • String
  • Two Pointers
  • Hash Table

####暴力解法 O(n2)

public class Solution {
    /**
     * @param s: a string
     * @return: an integer
     */
    public int lengthOfLongestSubstring(String s) {
        // write your code here
        if (s == "" || s == null || s.length() == 0) {
            return 0;
        }
        int size = s.length();
        int max = Integer.MIN_VALUE;

        for (int i = 0; i < size; i++) {
            HashSet<Character> hashset = new HashSet<Character>();
            int count = 0;
            for (int j = i; j < size; j++) {
                if (!hashset.contains(s.charAt(j))) {
                    hashset.add(s.charAt(j));
                    count++;
                } else {
                    break;
                }
                max = Math.max(max, count);

            }
        }

        return max;
    }
}

####优化解法 O(n)

  • 假设[0,3]最长,那么不用去找[1,3] [2,3], 所以i++的时候 j不一定需要变
  • 去找的时候[1, ?] j++ 去找[1,4]
public class Solution {
    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }

        Set<Character> set = new HashSet<Character>();
        char[] charArray = s.toCharArray();
        int size = s.length();

        int i = 0;
        int j = 0;
        int max = 0;

        while (j < size) {
            if (!set.contains(charArray[j])) {
                set.add(charArray[j++]);
                max = Math.max(max, j - i);
            } else {
                set.remove(charArray[i++]);
            }
        }

        return max;
    }
}