|  | 
 
 发表于 2022-6-8 00:44:59
|
显示全部楼层 
| 本帖最后由 qq1151985918 于 2022-6-8 00:46 编辑 
 
 看你一直没解决给你个简单代码吧,还是我跟你说的,如果字符串比较短容错值比较小可能还好,一旦数字很大是很庞大的计算量。没有你想的高级方式,只有穷举
 
 复制代码def compare(s1, s2):
    """
    :param s1: str -> 字符串 s1
    :param s2: str -> 字符串 s2
        :: 应当 len(s1) == len(s2) > 0
    :return: int -> 返回 s1, s2 不同共几处
    """
    
    d = 0
    for x, y in zip(s1, s2):
        if x != y:
            d += 1
    return d
def find(s1, s2, n):
    """
    :param s1: str -> 字符串 s1 母串
    :param s2: str -> 字符串 s2 目标子串
    :param n: int -> 最大容错值
        :: 应当 len(s1) >= len(s2) >= n
    :return: list -> 返回所有符合条件的结果
    """
    
    subsets = [s1[i:i+len(s2)] for i in range(len(s1)-len(s2)+1)]
    res = [subset for subset in subsets if compare(subset, s2) <= n]
    return res
    
if __name__ == '__main__':
    s1 = '12345578901234567890'
    s2 = '4567'
    print(find(s1, s2, 0))
    print(find(s1, s2, 1))
    
 | 
 |