在网上看到这样一道题。题目如下:
同构串
时间限制: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 False
c = {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 False
return True
然后经网友提醒还可以通过排序来判断,代码如下:
def test2(a, b):
if len(a) != len(b):
return False
c = [[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 False
return True
这两种方法经测试都可以编译通过,拿出来与大家共勉,如有不足,不吝赐教。