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

  • 相关阅读:
    批量修改Linux文件夹下所有文件大小写
    如何使用malloc申请一个二位数组
    CenOS 配置C/C++语言
    C++类定义,.h文件与.cpp文件之间的关系以及条件编译
    Error while building/deploying project...When executing step "qmake"——Qt Creator快速排错
    Hello World!
    HDU1262:寻找素数对
    NOIP1998复赛:2的幂次方表示
    HDU1002 : A + B Problem II
    Open Judge2748:全排列
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/9795247.html
Copyright © 2011-2022 走看看