简单的乐趣#31:替换密码?【难度:2级】--(Python Solutions)最佳题目答案合集(含多种解法)--景越编程训练之挑战1000道Python面试题

简单的乐趣#31:替换密码?【难度:2级】:

答案1:

def is_substitution_cipher(s1, s2):
    return len(set(s1)) == len(set(s2)) == len(set(zip(s1, s2)))

答案2:

import string
def is_substitution_cipher(s1, s2):
    return s1 == s2.translate(string.maketrans(s2, s1)) and s2 == s1.translate(string.maketrans(s1, s2))

答案3:

def f(s1, s2):
    d = {}
    for a, b in zip(s1, s2):
        if (a in d and d[a] != b):
            return False
        d[a] = b
    return True

def is_substitution_cipher(s1, s2):
    return f(s1, s2) and f(s2, s1)

答案4:

def is_substitution_cipher(s1, s2): 
  translation = {}
  back_translation = {}
  for ch1, ch2 in zip(s1, s2): 
    if (ch1 in translation): 
      if (not translation[ch1] == ch2): return False
    else: 
      translation[ch1] = ch2
    if (ch2 in back_translation): 
      if (not back_translation[ch2] == ch1): return False
    else: 
      back_translation[ch2] = ch1
  return True

答案5:

def is_substitution_cipher(s1, s2):
    return len(set(s1)) == len(set(s2)) == len( set((a,b) for a,b in zip(s1, s2)) )

答案6:

from string import maketrans
def is_substitution_cipher(s1, s2):
    return s1.translate(maketrans(s1,s2)) == s2 and s2.translate(maketrans(s2,s1)) == s1​

答案7:

def is_substitution_cipher(s1, s2):
    encoding = {i:set() for i in s1}
    for i,j in zip(s1, s2):
        encoding[i].add(j)
    for i in encoding.values():
        if len(i) != 1:
            return False
    lst = [frozenset(i) for i in encoding.values()]
    return len(set(lst)) == len(lst)

答案8:

def is_substitution_cipher(s1, s2):
    plain, cipher = {}, {}
    for a, b in zip(s1, s2):
        if plain.setdefault(a, b) != b or cipher.setdefault(b, a) != a:
            return False
    return True

答案9:

from string import ascii_lowercase

def is_substitution_cipher(s1, s2):
    r = set(ascii_lowercase)
    d = dict()
    for a, b in zip(s1, s2):
        if a in d:
            if d[a] != b:
                return False
        else:
            if b in r:
                d[a] = b
                r.discard(b)
            else:
                return False
    return True

答案10:

def is_substitution_cipher(s1, s2):
    sub_from, sub_to = {}, {}
    for c1, c2 in zip(s1, s2):
        if c1 not in sub_from and c2 not in sub_to:
            sub_from[c1], sub_to[c2] = c2, c1
        elif c1 in sub_from and sub_from[c1] != c2:
            return False
        elif c2 in sub_to and sub_to[c2] != c1:
            return False
    return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值