3. Longest Substring Without Repeating Characters

描述

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

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", 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.

分析:

題意是找出無重複的最大子串的長度,可以用兩個指針,前指針指向子串延長的位置,後指針指向子串開頭,配合hash表標記是否在子串中見過前指針(子串新添加字符)的字符,如果hash值爲1,即已經出現過,那之前的子串就結束了,將後指針逐個移動至前指針位置重新記子串,沿途將字母的hash值清零。這樣遍歷過後的子串長度最大值即爲結果。遍歷次數爲2N

java

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int[] index = new int[128];
        int ans = 0, i = 0, j = 0;
        while(i<s.length() && j<s.length()){
            if(index[s.charAt(j)] == 0 || i==j){
                ans = Math.max(ans, j-i+1);
                index[s.charAt(j++)] = 1;
            }
            else{
                index[s.charAt(i++)] = 0;
            }
        }
        return ans;
    }
}

Math.max(…)

String s.charAt(i): 返回字符串第i個字符的ascii碼。

String s.length(): 不同於list長度是一個變量,字符串的長度是一個方法。

Python

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        ans = 0
        i = j = 0
        indices = [0 for i in range(128)]
        while i < len(s) and j < len(s):
            if(indices[ord(s[j])] == 0 or i == j):
                indices[ord(s[j])] = 1
                j += 1
                ans = ans if ans > (j - i) else (j - i)
            else:
                indices[ord(s[i])] = 0
                i += 1
        return ans
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章