zoukankan      html  css  js  c++  java
  • LeetCode--003--无重复字符的最长子串

    问题描述:

    给定一个字符串,找出不含有重复字符的最长子串的长度。

    示例 1:

    输入: "abcabcbb"
    输出: 3 
    解释: 无重复字符的最长子串是 "abc",其长度为 3。
    

    示例 2:

    输入: "bbbbb"
    输出: 1
    解释: 无重复字符的最长子串是 "b",其长度为 1。
    

    示例 3:

    输入: "pwwkew"
    输出: 3
    解释: 无重复字符的最长子串是 "wke",其长度为 3。
         请注意,答案必须是一个子串"pwke" 是一个子序列 而不是子串。
    学业繁重,没时间写了。。。。。。

    方法1:s="pwwkew"  d={} ({"p":0,"w":1,"w":2,"k":3,"e":4,"w":5}) ,当s[i]在d中,start=d[s[i]] + 1从下一个位置开始,temp 存储最大长度 temp=max(i-start+1,temp)

     1 class Solution:
     2     def lengthOfLongestSubstring(self, s):
     3         """
     4         :type s: str
     5         :rtype: int
     6         """
     7         d={}
     8         start = 0
     9         temp = 0
    10         for i in range(len(s)):
    11             if s[i] in d and start <= d[s[i]]:
    12                 start = d[s[i]] + 1
    13             temp = max(temp,i-start+1)
    14             d[s[i]] = i
    15         return temp
    16                 

    方法2:

     1 class Solution:
     2     def lengthOfLongestSubstring(self, s):
     3         """
     4         :type s: str
     5         :rtype: int
     6         """
     7         sub=''
     8         sub_len=0
     9         max_len=0
    10         max_sub=''
    11         for letter in s:
    12             if letter in sub:
    13                 if sub_len>max_len:
    14                     max_len=sub_len
    15                     max_sub=sub
    16                 index=sub.index(letter)
    17                 sub=sub[index+1:]+letter
    18                 sub_len=sub_len-index
    19             else:
    20                 sub=sub+letter
    21                 sub_len+=1
    22         if sub_len>max_len:
    23             max_len=sub_len
    24         return max_len

    方法3:

     1 class Solution:
     2     def lengthOfLongestSubstring(self, s):
     3         """
     4         :type s: str
     5         :rtype: int
     6         """
     7         start = max_len = 0
     8         used = {}
     9         
    10         for i in range(len(s)):
    11             if s[i] in used and start <= used[s[i]]:
    12                 start = used[s[i]] + 1
    13             else:
    14                 max_len = max(max_len, i - start + 1)
    15             used[s[i]] = i
    16             
    17         return max_len

    2018-10-15 22:43:21

  • 相关阅读:
    Android笔记——UI开发
    P2P网络借贷系统-核心功能-用户投标-业务解说
    java回调简单实现
    Java面向对象编程(二)
    POJ-1190-生日蛋糕-DFS(深搜)-枚举-多重剪枝
    设计模式笔记——装饰模式
    bbed初体验
    高速理解环境变量
    最短路算法之 Dijkstra算法
    C++课程资源下载问题
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/9795247.html
Copyright © 2011-2022 走看看