题目
给定两个字符串s1, s2,如果s1, s2中出现的字符种类一样且每种字符出现的次数一样,则s1, s2互为变形词。判断s1, s2是否为变形词。
如
- “123”, "231"互为变形词
- “123”, “2331” 不互为变形词
思路
遍历s1,统计每个字符个数,遍历s2,每个字符,s1字符个数统计对应字符-1,若减到负数,说明个数不匹配,返回False。遍历完成则返回True
实现
from collections import defaultdict
def is_deformation(s1, s2):
if s1 is None or s2 is None or len(s1) != len(s2):
return False
m = defaultdict(int)
for c in s1:
m[c] += 1
for c in s2:
if m[c] == 0:
return False
m[c] -= 1
return True
测试
def test_is_deformation():
s1 = '123'
s2 = '231'
print(is_deformation(s1, s2))
s1 = '123'
s2 = '2331'
print(is_deformation(s1, s2))
assert(is_deformation('abcd', 'bcda') is True)
assert(is_deformation('abd', 'bcda') is False)
assert(is_deformation('aaa', 'aab') is False)
assert(is_deformation('aba', 'aab') is True)
if __name__ == '__main__':
test_is_deformation()