如何简化实现单编辑距离字符串判定?禁用def、lambda、enumerate
不使用lambda、enumerate实现单编辑距离判定
当然可以,用最基础的字符串遍历和条件判断就能实现,完全不需要lambda、enumerate这类语法,逻辑更直白,代码也更简洁:
# 示例实现(若要封装成函数,仅保留核心逻辑即可,这里展示无额外语法糖的写法) first = "pale" other = "ple" # 先过滤长度差超过1的情况 len_diff = len(first) - len(other) if abs(len_diff) > 1: is_one_edit = False else: idx = 0 # 手动遍历找第一个不同的字符位置 while idx < min(len(first), len(other)) and first[idx] == other[idx]: idx += 1 # 根据长度差处理剩余字符串的匹配 if len_diff == 0: # 长度相同,需替换当前字符,比较剩余部分 is_one_edit = first[idx+1:] == other[idx+1:] elif len_diff == 1: # first更长,需删除当前字符,跳过first的当前位置 is_one_edit = first[idx+1:] == other[idx:] else: # other更长,需插入字符,跳过other的当前位置 is_one_edit = first[idx:] == other[idx+1:] print(is_one_edit) # 输出 True
核心逻辑说明
- 长度差预判:如果两个字符串长度差的绝对值大于1,直接判定不满足单编辑距离。
- 手动遍历找差异点:用while循环逐个比较字符,直到找到第一个不同的位置,或者遍历完较短字符串的所有字符。
- 分情况匹配剩余字符串:
- 长度相同:只需验证跳过当前差异字符后,剩余部分是否完全一致(对应替换操作)。
- 长度差为1:较长字符串跳过当前差异位置后,和较短字符串剩余部分一致即可(对应删除/插入操作)。
这个实现没有依赖任何语法糖,完全用基础的循环和条件判断完成,可读性和效率都和原代码相当,甚至更直观。
内容的提问来源于stack exchange,提问作者izzy
相关产品推荐
相关产品推荐

