【问题标题】:Determine if two strings differ by at most n characters确定两个字符串是否最多相差 n 个字符
【发布时间】:2020-07-08 17:38:47
【问题描述】:

我正在尝试弄清楚如何解决这个问题的过程。

给定一个字符串列表 (los)、一个字符串 s 和一个整数边界 n,如果 los 中的所有字符串距 s 最多 n 个字符,则该函数应生成 True,否则为 False。

例如,

Input: (["ccat","hpat","ppat"], "ppat", 2)
Output: True

对于 False 情况,

Input: (["ccat","hpat","that"], "ppat", 1)
Output: False

谢谢!

【问题讨论】:

标签: python algorithm dynamic-programming


【解决方案1】:

您的部分解决方案称为“Levenshtein 距离”。你可以阅读更多here

你可以自己实现也可以找python解决方案here

实现后,您可以单独检查距离是否在 N 内,并循环

【讨论】:

    【解决方案2】:

    正如您所阐明的,您想通过 字符及其位置来查找两个字符串之间的差异,您可以执行以下操作:

    • 逐一遍历您的列表。
    • 对于列表中的每个单词,将其与提供的字符串逐个字符进行比较。
    • 如果一个字符与另一个字符不匹配,则增加差异计数器。
    • 如果差值大于所需差值,则返回False,否则返回True
    • 请记住,比较的 2 个字符串可以有不同的长度。在计算它们时也要考虑到这一点。

    片段:

    def isSame(str_list,s,diff_offset):
        s_len = len(s)
        for each_s in str_list:
            diff = abs(len(each_s) - s_len) # initialize with difference of string length
            length = min(len(each_s),s_len)
            for i in range(0,length):
                if s[i] != each_s[i]:
                    diff = diff + 1
                if diff > diff_offset:
                    return False # if difference is more than required, then return false
        return True
    
    
    print(isSame(["ccat","hpat","ppat"], "ppat", 2))
    print(isSame(["ccat","hpat","ppatru"], "ppat", 2))
    print(isSame(["ccat","hpat","that"], "ppat", 1))
    

    更新:

    根据问题陈述,如果长度不同,只需在开始逐个字符比较字符串之前返回 False。

    def isSame(str_list,s,diff_offset):
        s_len = len(s)
        for each_s in str_list:
            if len(each_s) != s_len:
                return False
            diff = 0
            for i in range(0,s_len):
                if s[i] != each_s[i]:
                    diff = diff + 1
                if diff > diff_offset:
                    return False # if difference is more than required, then return false
        return True
    
    
    print(isSame(["ccat","hpat","ppat"], "ppat", 2))
    print(isSame(["ccat","hpat","ppatru"], "ppat", 2))
    print(isSame(["ccat","hpat","that"], "ppat", 1))
    

    【讨论】:

      【解决方案3】:

      我会使用Levenshtein distance 来解决它。 Levenshtein 模块中有一个名为“距离”的函数:

      from Levenshtein import distance
      

      该函数获取 2 个字符串并返回它们之间的距离。 这就是你要找的。​​p>

      然后我将在列表的所有项目(理解、循环等)上实现它并检查是否全部为真。

      【讨论】:

        猜你喜欢
        • 2016-05-02
        • 2023-03-15
        • 2011-04-25
        • 1970-01-01
        • 2022-12-03
        • 1970-01-01
        • 2019-08-21
        • 2022-11-04
        • 1970-01-01
        相关资源
        最近更新 更多