日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

阿里-2019算法岗笔试编程题-kmp匹配

發(fā)布時間:2024/7/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阿里-2019算法岗笔试编程题-kmp匹配 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/qq_25737169/article/details/82503724 </div><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"><div id="content_views" class="markdown_views"><!-- flowchart 箭頭圖標(biāo) 勿刪 --><svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg><p>編程題一共兩道,博主是個菜雞,有幸被阿里虐了一遍,筆試結(jié)束后整理了一下題目和自己的答案,希望對各位有個參考,放正文前,先放一張圖,今年阿里和商湯的筆試時間有沖突,網(wǎng)上對于阿里和商湯的筆試評價如下圖: <br>

阿里的編程題真的好接地氣,感覺就是把項(xiàng)目中的一個小小的部分拿來了吧,完全打個措手不及;

開始正文

阿里:編程題1

請使用標(biāo)準(zhǔn)輸出(sys.stdout);已禁用圖形、文件、網(wǎng)絡(luò)、系統(tǒng)相關(guān)的操作,如Process , httplib , os;縮進(jìn)可以使用tab、4個空格或2個空格,但是只能任選其中一種,不能多種混用;如果使用sys.stdin.readline,因?yàn)槟J(rèn)會帶換行符,所以要strip(’ ‘)進(jìn)行截取;建議使用raw_input()
時間限制: 3S (C/C++以外的語言為: 5 S) 內(nèi)存限制: 128M (C/C++以外的語言為: 640 M)
輸入:
輸入數(shù)據(jù)包含兩行,
第一行,實(shí)體列表,多種實(shí)體之間用分號隔開,實(shí)體名和實(shí)體值之間用下劃線隔開,多個實(shí)體值之間用豎線隔開,所有標(biāo)點(diǎn)都是英文狀態(tài)下的,格式如下:
實(shí)體名稱1_實(shí)體值1|實(shí)體值2|…;實(shí)體名稱2_實(shí)體值1|實(shí)體值2|…;…
第二行,用戶的自然語言指令
輸出:
被標(biāo)記了關(guān)鍵詞的指令。指令中的關(guān)鍵詞前后加一個空格被單獨(dú)分出來,并在后面跟上”/”+實(shí)體名稱來標(biāo)記。如果一個實(shí)體值屬于多個實(shí)體,將這些實(shí)體都標(biāo)記出來,并按照實(shí)體名稱的字符串順序正序排列,并以逗號分隔。
輸入范例:
singer_周杰|周杰倫|劉德華|王力宏;song_冰雨|北京歡迎你|七里香;actor_周杰倫|孫儷
請播放周杰倫的七里香給我聽
輸出范例:
請播放 周杰倫/actor,singer 的 七里香/song 給我聽


個人答案,說到底就是字符串的處理問題,我先將關(guān)鍵字部分暴力搜索提取出來放在一個哈希表里,然后根據(jù)輸入的情況,不斷從哈希表里查找,輸出結(jié)果,這里放上自己的答案,沒有全部AC,有問題請各位指出:

def Solve(inputs, dicts):res = ""i = len(inputs) - 1while i>=0:j = i - 1s = inputs[j:i+1]while j>=0 and s not in dicts:j -= 1s = inputs[j:i+1]if s in dicts:res = ' ' + s + '/' + dicts[s] + ' '+ resi = j-1else:res = inputs[i] + resi -= 1return resimport 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)

測試結(jié)果:
我的Linux沒有中文的,所以我就直接提取了每個字的第一個字母代替這個字做測試;
輸入:

singer_zj|zjl;song_by|qlx;actor_zjl|sl qbfzjldqlxgwt
  • 1
  • 2

輸出情況:

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

阿里編程第二題


請使用標(biāo)準(zhǔn)輸出(sys.stdout);已禁用圖形、文件、網(wǎng)絡(luò)、系統(tǒng)相關(guān)的操作,如Process , httplib , os;縮進(jìn)可以使用tab、4個空格或2個空格,但是只能任選其中一種,不能多種混用;如果使用sys.stdin.readline,因?yàn)槟J(rèn)會帶換行符,所以要strip(’ ‘)進(jìn)行截取;建議使用raw_input()
時間限制: 3S (C/C++以外的語言為: 5 S) 內(nèi)存限制: 128M (C/C++以外的語言為: 640 M)
輸入:
輸入數(shù)據(jù)包含兩行,
第一行,上述格式的語義模板表達(dá)式
第二行,用戶的自然語言指令(即:用戶query)
輸出:
當(dāng)前query是否匹配當(dāng)前語義模板表達(dá)式。匹配,則輸出1,否則輸出0.
輸入范例:
<[播]放|來>[一|幾]<首|曲|個>@{singer}的<歌[曲]|[流行]音樂>
來幾首@{singer}的流行歌曲
輸出范例:
0


這個題沒做出來,好麻煩,事后做了一下,純暴力切割字符串,一個個做匹配,代碼一點(diǎn)也不符合信達(dá)雅原則,請輕噴:

def inprocess(strings):dicts = {'<':'>', '>':'<', '[':']', ']':'[' }flag = []i = 0res = []start = 0# split inputs to many stringswhile i <len(strings):s = strings[i]if s=='<' or s=='[':flag.append(s)if strings[start]=='@':res.append(strings[start:i])start = ielif flag and s==dicts[flag[-1]]:tmp = flag.pop()if flag:continueelse:res.append(strings[start+1:i])start = i+1del tmpi += 1# process the rescollect = []for id, lists in enumerate(res):if '|' not in lists:collect.append(lists)continuelists = lists.split('|')for s in lists:i = 0# while i < len(s):if s[i]=='[':collect.append(s[i+1:s.index(']')])i = s.index(']')+1if i<len(s):collect.append(collect[-1]+s[i:])elif '[' not in s:collect.append(s)for c in res:print(c)print(collect)return collectdef testing(qurry, collect):i = 0while i<len(qurry):c = qurry[i]if c in collect:collect = collect[collect.index(c)+1:]elif c=='@':if qurry[i:qurry.index('}')+2] in collect:i = qurry.index('}') + 1else:return 0else:return 0i += 1return 1if __name__ == '__main__':inputs = "<[B]F|L>[Y|J]<S|Q|G>@{singer}G<[Q]|[LX]YL>"res = inprocess(inputs)qurry = "LJS@{singer}GLXGQ"

我想的是:來幾首@{singer}的流行歌曲測試結(jié)果為0可能是流行和歌曲放反了???只能是歌曲,流行,流行音樂???喵喵喵???

測試結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的阿里-2019算法岗笔试编程题-kmp匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。