python版本--求最长子串

来源:互联网 发布:公司封了lol端口 代理 编辑:程序博客网 时间:2024/06/05 08:55
def lengthOfLongestSubstring(s):    d_map = {}    start = maxLength = 0    for i in range(len(s)):        if s[i] in d_map and start <= d_map[s[i]]:            start = d_map[s[i]] + 1        else:            maxLength = max(maxLength, i - start + 1)        d_map[s[i]] = i    return maxLengths = "abcabcdbb"print lengthOfLongestSubstring(s)




在Python中,或者在编程语言中,字典的的用处很多,会想起当初写存活主机扫描,第一次用到C++的 map字典,当时惊为天人,第一次用到这么高端的写法,当时感觉真是方便,现在才发现,这个数据结构的用处很多,比如以上的这个算法。


1.首先我们申请一个空的字典,

2.然后定义申请一个字串的最大长度maxLength和每个元素出现的开始首位值start,start这个值仅当字符串中第二次出现时会变化,值等于都一次出现的位置加1即可。

3.开始循环,如果当前字符存在于字典中且start小于当前字符的值,start加上1,否则的话就求出循环到当前位置时最大的字串的长度。

4.最后返回最大字串长度


我们根据字典的特性,很好的求出了子串的长度。

本来我最初的思路是:

1.从第一位遍历,求从这最大字串的长度,

2.然后每次保存到字典,

3.最后求字典中的最大值

最后发现写下来很复杂,而且很多情况没有写进去,就借鉴了别人的写法,果然,时间复杂度降到了最低,也便利了了每个元素,字典中,只存的是字串,很棒的思路,感谢!



0 0
原创粉丝点击