達觀資料筆試題目最長子串和去除鍊錶重複元素

2021-10-05 08:51:14 字數 1755 閱讀 5995

題目1 :

給定乙個字串,找到最長子字串的長度,要求子字串中所有字元不重複。

example:

input: "abcabcbb"

output: 3

explanation: 滿足條件的最長子字串為 "abc", 長度為3.

解法一:這一題如果使用暴力解法時間複雜度較高。暴力解法就是兩層迴圈遍歷判斷是否遇到重複

解法二:

**如下:

def

lengthoflongestsubstring

(s):

res =

0if s is

none

orlen

(s)==0:

return res

d =tmp =

0 start =

0for i in

range

(len

(s))

:if s[i]

in d and d[s[i]

]>= start:

start = d[s[i]]+

1 tmp = i - start +

1 d[s[i]

]= i

res =

max(res, tmp)

print

(d)return res

res = lengthoflongestsubstring(

'abcabcbb'

)print

(res)

題目2:

有兩個有序鍊錶a和b,合併a和b成為乙個新的有序列表c,並去除其中的重複元素。盡量不要開闢新的儲存空間,時間複雜度o(n)。

定義乙個新的鍊錶node,然後同步的對a列表和b列表朝下遍歷

a和b誰的下乙個節點的值較小就把誰接在node鍊錶後面,並把next節點值較小的鍊錶朝後移一位

如果a和b的next節點的值相等,a和b都朝後移一位。把a接在node後面。

**如下:

#定義鍊錶類

class

listnode

:def

__init__

(self, x)

: self.val = x

self.

next

=none

defmergetwolists

(l1,l2)

: res = listnode(

none

) node = res

while l1 and l2:

if l1.valnode.

next

,l1 = l1,l1.

next

elif l1.val>l2.val:

node.

next

,l2 = l2,l2.

next

else

: node.

next

,l1,l2 = l1,l1.

next

,l2.

next

node = node.

next

if l1:

node.

next

= l1

else

: node.

next

= l2

return res.

next

筆試演算法 最長子串

子字串的定義和子串行的定義類似,但要求是連續分布在其他字串中。比如輸入兩個字串bdcaba和abcbdab的最長公共字串有bd和ab,它們的長度都是2。最直接的解法自然是找出兩個字串的所有子字串進行比較看他們是否相同,然後取得相同最長的那個。對於乙個長度為n的字串,它有n n 1 2 個非空子串。所...

筆試題23 無重複字元的最長子串

題目描述 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。思想 遇到子串問題,首先想到的就是滑動窗 巧。類似之前的思路,使用 window 作為計數器記錄視窗中的字元出現次數,然後先向右移動 ...

資料結構筆試題目

1 c 編成求二叉樹的深度 int bintreedepth link head 2 排序二叉樹插入乙個節點或雙向鍊錶的實現 排序二叉樹 左小於根,根小於右。左右又分別是排序二叉樹。前序遍歷 根左右 中序遍歷 左根右 後序遍歷 左右根 排序二叉樹插入乙個結點 大於左,往右找,小於右往左找,遞迴實現。...