程式設計題一共兩道,博主是個菜雞,有幸被阿里虐了一遍,筆試結束後整理了一下題目和自己的答案,希望對各位有個參考,放正文前,先放一張圖,今年阿里和商湯的筆試時間有衝突,網上對於阿里和商湯的筆試評價如下圖:
阿里的程式設計題真的好接地氣,感覺就是把專案中的乙個小小的部分拿來了吧,完全打個措手不及;
開始正文
個人答案,說到底就是字串的處理問題,我先將關鍵字部分暴力搜尋提取出來放在乙個雜湊表裡,然後根據輸入的情況,不斷從雜湊表裡查詢,輸出結果,這裡放上自己的答案,沒有全部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)
sys.stdout.write(res + '\n')
測試結果:
我的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"
print(testing(qurry, res))
我想的是:來幾首@的流行歌曲測試結果為0可能是流行和歌曲放反了???只能是歌曲,流行,流行**???喵喵喵???
測試結果:
阿里 2019演算法崗筆試程式設計題 kmp匹配
程式設計題一共兩道,博主是個菜雞,有幸被阿里虐了一遍,筆試結束後整理了一下題目和自己的答案,希望對各位有個參考,放正文前,先放一張圖,今年阿里和商湯的筆試時間有衝突,網上對於阿里和商湯的筆試評價如下圖 阿里的程式設計題真的好接地氣,感覺就是把專案中的乙個小小的部分拿來了吧,完全打個措手不及 開始正文...
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 ...