阿里 2019演算法崗筆試程式設計題 kmp匹配

2021-09-16 22:04:40 字數 3624 閱讀 7805

程式設計題一共兩道,博主是個菜雞,有幸被阿里虐了一遍,筆試結束後整理了一下題目和自己的答案,希望對各位有個參考,放正文前,先放一張圖,今年阿里和商湯的筆試時間有衝突,網上對於阿里和商湯的筆試評價如下圖:

阿里的程式設計題真的好接地氣,感覺就是把專案中的乙個小小的部分拿來了吧,完全打個措手不及;

開始正文

個人答案,說到底就是字串的處理問題,我先將關鍵字部分暴力搜尋提取出來放在乙個雜湊表裡,然後根據輸入的情況,不斷從雜湊表裡查詢,輸出結果,這裡放上自己的答案,沒有全部ac,有問題請各位指出:

def

solve

(inputs, dicts):

res = ""

i = len(inputs) - 1

while i>=0:

j = i - 1

s = inputs[j:i+1]

while j>=0

and s not

in dicts:

j -= 1

s = inputs[j:i+1]

if s in dicts:

res = ' ' + s + '/' + dicts[s] + ' '+ res

i = j-1

else:

res = inputs[i] + res

i -= 1

return res

import sys

if __name__ == '__main__':

ss = input().split(';')

dicts = {}

names =

for s in ss:

s = s.split('_')

s[1] = s[1].split('|')

for i in range(len(s[1])):

key = s[1][i]

if key not

in dicts:

dicts[key] = s[0]

else:

dicts[key] = dicts[key] + ',' + s[0]

names += s[1]

strings = input()

res = solve(strings, dicts)

測試結果:

我的linux沒有中文的,所以我就直接提取了每個字的第乙個字母代替這個字做測試;

輸入:singer_zj|zjl;song_by|qlx;actor_zjl|sl

qbfzjldqlxgwt

輸出情況:

從單個測試結果來看,還是正確的,但是不確定中文情況下行不行,我的結果也沒有全部ac

請使用標準輸出(sys.stdout);已禁用圖形、檔案、網路、系統相關的操作,如process , httplib , os;縮排可以使用tab、4個空格或2個空格,但是只能任選其中一種,不能多種混用;如果使用sys.stdin.readline,因為缺省會帶換行符,所以要strip(』 『)進行擷取;建議使用raw_input()

時間限制: 3s (c/c++以外的語言為: 5 s) 記憶體限制: 128m (c/c++以外的語言為: 640 m)

輸入:

輸入資料報含兩行,

第一行,上述格式的語義模板表示式

第二行,使用者的自然語言指令(即:使用者query)

輸出:

當前query是否匹配當前語義模板表示式。匹配,則輸出1,否則輸出0.

輸入範例:

來幾首@的流行歌曲

輸出範例:

0這個題沒做出來,好麻煩,事後做了一下,純暴力切割字串,乙個個做匹配,**一點也不符合信達雅原則,請輕噴:

def

inprocess

(strings):

dicts =

flag =

i = 0

res =

start = 0

# split inputs to many strings

while i if s=='

or s=='[':

if strings[start]=='@':

start = i

elif flag and s==dicts[flag[-1]]:

tmp = flag.pop()

if flag:

continue

else:

start = i+1

del tmp

i += 1

# process the res

collect =

for id, lists in enumerate(res):

if'|'not

in lists:

continue

lists = lists.split('|')

for s in lists:

i = 0

# while i < len(s):

if s[i]=='[':

i = s.index(']')+1

if ielif

'['not

in s:

for c in res:

print(c)

print(collect)

return collect

deftesting

(qurry, collect):

i = 0

while iif c in collect:

collect = collect[collect.index(c)+1:]

elif c=='@':

if qurry[i:qurry.index('}')+2] in collect:

i = qurry.index('}') + 1

else:

return

0else:

return

0 i += 1

return

1if __name__ == '__main__':

inputs = "[y|j]@g"

res = inprocess(inputs)

qurry = "ljs@glxgq"

我想的是:來幾首@的流行歌曲測試結果為0可能是流行和歌曲放反了???只能是歌曲,流行,流行**???喵喵喵???

測試結果:

2019演算法崗阿里筆試程式設計題

程式設計題一共兩道,博主是個菜雞,有幸被阿里虐了一遍,筆試結束後整理了一下題目和自己的答案,希望對各位有個參考,放正文前,先放一張圖,今年阿里和商湯的筆試時間有衝突,網上對於阿里和商湯的筆試評價如下圖 阿里的程式設計題真的好接地氣,感覺就是把專案中的乙個小小的部分拿來了吧,完全打個措手不及 開始正文...

2020阿里筆試程式設計題

選擇題很難做,阿里的秋招貌似非常難,大部分崗位都留給了實習生,但是兩道程式設計題不怎麼難。有乙個n n的地圖,乙隻兔子想要穿過這個地圖,給出的地圖是乙個二維陣列map i j 數值表示該位置的毒霧持續時間,當兔子在 x,y 位置時,它可以跳到 x 2,y 或者 x,y 2 位置,跳的時候需要對應等待...

20190405騰訊後端開發崗筆試程式設計題

第一題 題目大意是 有很多種錢幣,每種可以無限用,然後給定乙個m,需要用這些錢幣來湊從1到m的數值的金額 感覺像數字dp,當時沒做出來,includeusing namespace std int a 101 int m,n int num int x return ans int main if ...