zoukankan      html  css  js  c++  java
  • Longest Substring Without Repeating Characters

    #title
    #Longest Substring Without Repeating Characters 
    #description:
    #Given a string, 
    #find the length of the longest substring without 
    #repeating characters. 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.
    
    # one method:O(n)
    # dict.has_key need O(1)
    # substring forward a bit each step
    # class Solution:
    #     # @return an integer
    #     def lengthOfLongestSubstring(self, s):
    #     	substring = dict()
    #     	max_len = 1
    #     	min_num = 0
    #     	for i in range(len(s)):
    #     		if not substring.has_key(s[i]):
    #     			substring[s[i]] = i 
    #     			if (i + 1 - min_num > max_len):
    #     				max_len = i + 1 - min_num
    #     		else:
    #     			if(substring[s[i]] + 1 > min_num):
    #     				min_num = substring[s[i]] + 1
    #     			if(substring[s[i]] < min_num):
    #     				substring[s[i]] = min_num
    #     			if(i - substring[s[i]] > max_len):
    #     				max_len = i -substring[s[i]]
    #     			substring[s[i]] = i 
    #     		print max_len,min_num,substring
    #     	return max_len
    
    #method two:need O(n)
    #add flag to fore_process 
    #and note that print sentence
    class Solution:
        # @return an integer
        def lengthOfLongestSubstring(self, s):
        	substring = dict()
        	max_len = 1
        	min_num = 0
        	flag = dict()
        	for i in range(len(s)):
        		flag[s[i]] = 0
        	for i in range(len(s)):
        		if flag[s[i]] == 0:
        			flag[s[i]] = 1
        			substring[s[i]] = i 
        			if (i + 1 - min_num > max_len):
        				max_len = i + 1 - min_num
        		else:
        			if(substring[s[i]] + 1 > min_num):
        				min_num = substring[s[i]] + 1
        			if(substring[s[i]] < min_num):
        				substring[s[i]] = min_num
        			if(i - substring[s[i]] + 1 > max_len):
        				max_len = i + 1 - substring[s[i]]
        			substring[s[i]] = i 
        		# print max_len,min_num,substring
        	if len(s) == 0:
        		max_len = 0
        	return max_len
    
    
    if __name__ == '__main__':
    	s = Solution()
    	substring = 'abcabcbb'
    	substring = 'bbbbb'
    	substring = 'abcabbcaa'
    	substring = 'ynqogshxhchhpqhjrwwtdm'
    	substring = 'bhhoejpnsoqioadvynqrbo'
    #	substring = ''
    #	substring = 'tmmzuxt'
    	print s.lengthOfLongestSubstring(substring)
    

      

  • 相关阅读:
    JSP介绍
    Cookie和Session的原理及异同
    过滤器的使用
    JAVA 集合
    **JVM** 类加载机制
    *JAVA IO/NIO*
    jvm
    ioc
    spring问题总结
    aop详解
  • 原文地址:https://www.cnblogs.com/xieweichong/p/4269640.html
Copyright © 2011-2022 走看看