ai代码问题记录
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 = iwhile (start < len(a) anda[start] in b anda[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 inrange(len(substring))):# 更新最长公共子串if len(substring) > len(longest):longest = substringreturn longest# 定义两个字符串
b = "24312000000174179329"
a = "74178902"# 找出最长的公共子串
common_substring = find_common_substring2(a, b)print(common_substring) #