leetcode-3-longest-substring-without-repeating-characters

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

贪心法:子问题可以决定父问题

动态规划:自问题影响父问题

ord()将字符转换成ascii码

class Solution:
    # @return an integer
    def lengthOfLongestSubstring(self, s):
        longest, start, visited = 0, 0, [False for _ in xrange(256)]
        #visited是一个bool表,标记当前扫描substring已经存在的字母
        for i, char in enumerate(s):
            if visited[ord(char)]: #当前字符已经存在,ord()将字符转换成ascii码
                while char != s[start]:#找到当前扫描字符之前重复的位置!重新开始扫
                    visited[ord(s[start])] = False
                    start += 1
                start += 1
            else:#未出现过,标记之
                visited[ord(char)] = True
            #择更大的长度保存到longest
            longest = max(longest, i - start + 1)
        return longest

if __name__ == "__main__":
    print Solution().lengthOfLongestSubstring("abcabcbb")