劍指offer48 最長不含重複字元的子字串

2021-10-03 04:04:09 字數 1836 閱讀 8001

輸入乙個字串(只包含 a~z 的字元),求其最長不含重複字元的子字串的長度。例如對於 arabcacfr,最長不含重複字元的子字串為 acfr,長度為 4。

# 方法1:暴力法

#判斷乙個字串是否重複

def repeatstring(str):

for i in range(len(str)-1):

for j in range(i+1,len(str)):

if str[i]==str[j]:

return true

return false

# str='acfr'

# repeatstring(str)

#字串列表裡面最大長度字串長度

def maxlilen(strli):

max1=1

for i in strli:

if len(i)>max1:

max1=len(i)

return max1

def longsubstringwithoutduplication(str):

#先找出所有的子字串

result=

for i in range(len(str)):

for j in range(i+1,len(str)+1):

print(result)

re=for i in result:

if not repeatstring(i):

for i in re:

if len(i)==maxlilen(re):

return i ,maxlilen(re)

str='arabcacfr'

longsubstringwithoutduplication(str)

#方法2:動態規劃

#方法2:動態規劃

def longsubstringwithoutduplication(str):

# if not s:

# return 0

# curlength = 0

# maxlength = 0

# position = [-1]*256

# for i in range(len(s)):

# previndex = position[ord(s[i])]

# if previndex < 0 or i-previndex>curlength:

# curlength+=1

# else:

# if curlength>maxlength:

# maxlength = curlength

# curlength = i-previndex

# position[ord(s[i])]=i

# if curlength>maxlength:

# maxlength = curlength

# return maxlength

dic=

res=[1]

for i in range(1,len(str)):

if str[i] not in dic:

else:

dic[str[i]]=i

return max(res)

str='arabcacfr'

longsubstringwithoutduplication(str)

劍指offer 48 最長不含重複字元的子字串

請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。定義函式f i 表示以第i個字元為結尾的不包含重複字元的子字串的最大長度。下面以第i個字元之前有沒有出現過重複字元分為兩種情況討論。如果第i個字元之前沒有出現過重複字元,即f f i 1 1。在字串 dhabcacfh 中,顯然...

劍指offer 48 最長不含重複字元的子字串

題目出處 leetcode 劍指offer 48 最長不含重複字元的子字串 這道題和leetcode 3 無重複字元的最長子串相同。請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。曾經面試農業銀行,二面出了這道題。如果採用暴力的方法,首先乙個長度為n的字串,它的子串有n n ...

劍指offer(48) 最長不重複字元子串

題目描述 請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。思路分析 滑動視窗雙指標 1.初始化頭尾指標 head,tail 2.tail 指標右移,判斷 tail 指向的元素是否在 head tail 的視窗內 3.返回視窗長度的最大值。def lengthoflongest...