輸入乙個字串(只包含 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...