溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用Python3怎么輸出一個無重復(fù)字符的最長子串

發(fā)布時間:2021-04-19 17:00:28 來源:億速云 閱讀:207 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了使用Python3怎么輸出一個無重復(fù)字符的最長子串,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

python是什么意思

Python是一種跨平臺的、具有解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言,其最初的設(shè)計是用于編寫自動化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開發(fā)獨立的項目和大型項目。

題目:

給定一個字符串,請你找出其中不含有重復(fù)字符的 最長子串 的長度。

示例:

示例 1:
輸入: “abcabcbb”
輸出: 3
解釋: 因為無重復(fù)字符的最長子串是 “abc”,所以其長度為 3。

示例 2:
輸入: “bbbbb”
輸出: 1
解釋: 因為無重復(fù)字符的最長子串是 “b”,所以其長度為 1。

示例 3:
輸入: “pwwkew”
輸出: 3
解釋: 因為無重復(fù)字符的最長子串是 “wke”,所以其長度為 3。
請注意,你的答案必須是 子串 的長度,“pwke” 是一個子序列,不是子串。

思路:

這道題會很自然的想到暴力解法,就是按位遞增依次檢查子串是否重復(fù),并記下目前最大的子串長度,如果重復(fù)就從下一位索引處的字符開始重新檢查。下面是代碼實現(xiàn):

class Solution:
 def lengthOfLongestSubstring(self, s: str) -> int:
 # 最長子串的長度
 max_len = 0
 # 存放字符的字典
 char_dict = {}
 index = 0
 while s[index:].__len__() >= max_len:
  # 當(dāng)前最長子串長度
  current_len = 0
  for item in s[index:]:
  old_index = char_dict.get(item)
  if old_index is not None:
   index = old_index + 1
   char_dict.clear()
   break
  char_dict[item] = index
  index += 1
  current_len += 1
  if current_len > max_len:
  max_len = current_len
 return max_len

開始只是想跑通,沒想到超出了時間限制??雌饋泶a顯得是有點啰嗦,但是思路應(yīng)該是沒有問題的,我們還是從遍歷的角度來優(yōu)化。

優(yōu)化:

在上面的代碼中,當(dāng)遇到重復(fù)字符時,遍歷的起始點就往后挪一位,但其實兩個重復(fù)字符之間的部分是不會重復(fù)的,比如字符串fbacdadfeed,在第一次從 f 開始遍歷遇到重復(fù)字符即第二個 a 的時候,下一次遍歷不應(yīng)該從 b 開始,而是應(yīng)該從前一個重復(fù)字符的后一個字符即 c 開始。

確定思想,并多次優(yōu)化后的代碼如下:

class Solution:
  def lengthOfLongestSubstring(self, s: str) -> int:
    char_dict = {}
    start, end, max_len = -1, 0, 0
    str_len = s.__len__()
    while end < str_len:
      char = s[end]
      if char in char_dict:
        old_index = char_dict[char]
        if old_index > start:
         start = old_index 
      diff = end -start
      if diff > max_len:
        max_len = diff 
      char_dict[char] = end
      end += 1
    return max_len;

上述內(nèi)容就是使用Python3怎么輸出一個無重復(fù)字符的最長子串,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI