Leetcode Longest Substring Without Repeating Characters Python的失败实现与学习

Python版本自己都写的这么长,虽然对于例子都通过了,但是在leetcode运行的时候还是通不过,主要是因为起初想算法的时候,疏漏了很关键的东西,其起初的思路是:在遍历字符串的时候,遇到重复的字符就截取一个字串,然后计算所得到的子串中长度最大的返回,如果字符串为空的话返回0,如果没有重复的字符返回字符串的长度
自己失败的版本:

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        temp = []
        dict = {}
        point = 0
        count1 = 0
        if len(s) == 0:
            return 0
        for char in s:
            point = point + 1
            if char in temp:
                dict[point] = temp
                temp = []
                temp.append(char)
            else:
                temp.append(char)
                count1 = count1 + 1
                if len(s) == count1:
                    return len(s)
        dict[point + 1] = temp
	a = []
        for key in dict:
            print dict[key]
            a.append(len(dict[key]))
        return max(a)

讨论板上比较不错的Java和Python
Java
  public int lengthOfLongestSubstring(String s) {
        if (s.length()==0) return 0;
        HashMap map = new HashMap();
        int max=0;
        for (int i=0, j=0; i
利用hashmap找到前一个相同字符的位置,那么着这两者之间的距离就是以当前字符结尾的最长substring.比较目前max的大小,看是否需要更新.还要记得更新一下字符的位置,因为会有重复

Python

class Solution:
    # @return an integer
    def lengthOfLongestSubstring(self, s):
        start = maxLength = 0
        usedChar = {}
        
        for i in range(len(s)):
            if s[i] in usedChar and start <= usedChar[s[i]]:
                start = usedChar[s[i]] + 1
            else:
                maxLength = max(maxLength, i - start + 1)

            usedChar[s[i]] = i

        return maxLength


你可能感兴趣的:(数据结构与算法)