我的任务是编写一个函数,返回两个字符串是否为彼此的substitution ciphers.假设没有给一个人一把 keys .预计输出将返回True或False.

这里给了我几个测试用例(分别为string1string2):

  1. 香蕉/可乐-->True
  2. 狗/cat -->True
  3. 香蕉/科尔-->False

以下是我到目前为止在这个问题上所写的(borrow 自CodeFights的一个问题).其思想是将字符串中每个元素的计数附加到string1countstring2count变量中.然后,比较每个索引处的计数,如果它们不相等,我们可以假定它不是有效的替代密码,因为数组中的每个元素需要具有相同数量的对应字符才能成为替代密码.

def isSubstitutionCipher(string1, string2):
    string1count = []
    string2count = []
    for i in range(0,len(string1)):
        string1count.append(string1.count(string1[i]))
    for i in range(0,len(string2)):
        string2count.append(string2.count(string2[i]))
    
    for i in range(0,len(string1count)):
        if string1count.count(string1count[i])!=string2count.count(string1count[i]):
            return False
    
    return True

Does anyone else have other proposals on how to solve this very general question / problem statement?

推荐答案

您可以try 重新创建替代方案:

def isSubstitutionCipher(string1, string2):

    if len(string1) != len(string2):
        return False

    subst = {}
    for c1, c2 in zip(string1, string2):
        if c1 in subst:
            if c2 != subst[c1]:
                return False
        else:
            if c2 in subst.values():
                return False
            subst[c1] = c2
    return True

对于您已经看到的所有字符,请确保替换匹配.对于新的:将它们存储在替换中,并确保它们还没有成为替换目标.

这将在第一个不匹配的字符处返回False.

Python相关问答推荐

查找两极rame中组之间的所有差异

如何在虚拟Python环境中运行Python程序?

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

为什么默认情况下所有Python类都是可调用的?

Python键入协议默认值

无法使用requests或Selenium抓取一个href链接

如何使用它?

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

在嵌套span下的span中擦除信息

numpy.unique如何消除重复列?

在pandas/python中计数嵌套类别

剪切间隔以添加特定日期

导入错误:无法导入名称';操作';

在numpy数组中寻找楼梯状 struct

Js的查询结果可以在PC Chrome上显示,但不能在Android Chrome、OPERA和EDGE上显示,而两者都可以在Firefox上运行

在round函数中使用列值

如何在python tkinter中绑定键盘上的另一个回车?

使用xlsxWriter在EXCEL中为数据帧的各行上色

日志(log)轴上的自定义刻度出现意外的次要刻度标记行为

Django/Python-UpdateView中的Delete函数正在复制,而不是删除