1.问题:求2个字符串的交集字串
ai的答案老是不会考虑重复字符导致的各种问题,如顺序,值覆盖等
#答案一
def find_longest_common_substring(a, b):
longest = ""
for i in range(len(a)):
if a[i] in b:
# 从a中找到b中存在的第一个字符开始
start = i
while (start < len(a) and
a[start] in b and
a[start] == b[b.index(a[start])]):
start += 1
# 检查当前窗口是否是最长的公共子串
if start - i > len(longest):
longest = a[i:start]
return longest
# 定义两个字符串
a = "1234554321"
b = "543011"
# 找出最长的公共子串
longest_common = find_longest_common_substring(a, b)
print(longest_common) # 输出最长的公共子串345543,不对,正确的应该是543
#答案二
def find_common_substring2(a, b):
# 创建一个哈希表,存储字符串a中每个字符的索引
# 这里有问题,如果字符重复出现会覆盖原位置
index_map = {char: idx for idx, char in enumerate(a)}
#print(index_map)
# 初始化最长公共子串
longest = ""
# 遍历字符串b,使用滑动窗口的方法查找公共子串
for i in range(len(b)):
# 如果当前字符在哈希表中,检查从当前位置开始的子串
if b[i] in index_map:
for j in range(i + 1, len(b) + 1):
# 构造子串
substring = b[i:j]
# 检查这个子串是否在a中,且是否是当前找到的最长子串
if all(b[i + k] in index_map and index_map[b[i + k]] - index_map[b[i]] == k for k in
range(len(substring))):
# 更新最长公共子串
if len(substring) > len(longest):
longest = substring
return longest
# 定义两个字符串
b = "24312000000174179329"
a = "74178902"
# 找出最长的公共子串
common_substring = find_common_substring2(a, b)
print(common_substring) #