【LeetCode】3. Longest Substring Without Repeating Characters

Difficulty: Medium

 More:【目录】LeetCode Java实现

Description

https://leetcode.com/problems/longest-substring-without-repeating-characters/

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

Example 1:

Input: "abcabcbb"
Output: 3 
Explanation: The answer is "abc", with the length of 3. 

Example 2:

Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.

Example 3:

Input: "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3. 
             Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

Intuition

Method1: Refer to: 最长不含重复字符的子字符串

 Method2: Traverse each char in the string and update the startIndex and the endIndex of the Substring.

Use array(size=256) to store lastIndex of current char.

Solution

    public int lengthOfLongestSubstring(String s) {
        if(s==null || s.length()<=0)
            return 0;
        int[] lastIndex = new int[256];
        for(int i=0;i<256;i++)
            lastIndex[i]=-1;
        int maxLen=0;
        int startIndex=0;
        for(int endIndex=0;endIndex<s.length();endIndex++){
            if(lastIndex[s.charAt(endIndex)]>=startIndex)
                startIndex=lastIndex[s.charAt(endIndex)]+1;
            maxLen=Math.max(endIndex-startIndex+1,maxLen);
            lastIndex[s.charAt(endIndex)]=endIndex;
        }
        return maxLen;
    }

  

Complexity

Time complexity : O(n)

Space complexity :  O(1)

What I've learned

1. size: ASCII——128;  Extended ASCII——256

 

 More:【目录】LeetCode Java实现

 

posted @ 2018-12-05 16:01  华仔要长胖  阅读(479)  评论(0编辑  收藏  举报