一道笔试题
在網上看到這樣一道題。題目如下:
同構串 時間限制:C/C++語言 1000MS;其他語言 3000MS 內存限制:C/C++語言 65536KB;其他語言 589824KB 題目描述: 給出兩個字符串a1a2a3...an和b1b2b3...bm,如果存在一種映射ai=f(bi),且如果ai≠bi,f(ai)≠f(bi),我們稱這兩個字符串同構。輸入 輸入第一行包含一個t,表示數據組數,t<=20.對于每組數據,輸入包含兩行,每一行有一個字符串。每個字符串的長度不超過10000,字符串全部由小寫字母組成。輸出 對于每組數據輸出一行,如果字符串同構,輸出“Yes”,不同構則輸出“No”。樣例輸入2 abac bcbd aba abc 樣例輸出 Yes No當時腦子里首先想到的就是python的字典。代碼實現如下:(python3)
def test1(a, b):if len(a)!=len(b):return Falsec = {i:0 for i in a}for i in range(len(b)):if c[a[i]] == 0:c[a[i]] = b[i]else:if c[a[i]] != b[i]:return Falsereturn True然后經網友提醒還可以通過排序來判斷,代碼如下:
def test2(a, b):if len(a) != len(b):return Falsec = [[a[i], b[i]] for i in range(len(a))]c.sort()for i in range(len(c)-1):if c[i][0] == c[i+1][0] and c[i][1] != c[i+1][1]:return Falsereturn True這兩種方法經測試都可以編譯通過,拿出來與大家共勉,如有不足,不吝賜教。
總結
- 上一篇: python3环境下使用OpenGL和G
- 下一篇: 一道逻辑题