鱼C论坛

 找回密码
 立即注册
查看: 1789|回复: 4

[技术交流] 最小子串

[复制链接]
发表于 2023-4-15 10:40:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 凌九霄 于 2023-4-15 10:55 编辑

题目描述:
给你三个字符串a, b, c (0 < len(a) <= 100, 0 < len(b), len(c) <= 20),请你找出a的某个子串,要求该子串长度最小,并且同时包含b和c。特别地,如果有多个这样的子串,则请输出字母序最小的一个,如果不存在这样的子串,输出No。 例如:a='abcd', b='ab', c='bc', 则输出:abc

找的题目都是稍有些难度的,下面是ChatGPT给出的解:
游客,如果您要查看本帖隐藏内容请回复
[/hide]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 10:50:07 | 显示全部楼层
双层隐藏,就是vip也得回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-15 10:55:01 | 显示全部楼层
歌者文明清理员 发表于 2023-4-15 10:50
双层隐藏,就是vip也得回复

哦,怎么没想到呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 11:02:50 | 显示全部楼层
你可以使用滑动窗口算法来解决这个问题。下面是一个用Python实现的解决方案:
def min_substring(a, b, c):
    # 辅助函数:判断字符串 s 是否包含 target 的所有字符
    def contains_substring(s, target):
        for ch in target:
            if ch not in s:
                return False
        return True

    left, right = 0, 0  # 初始化左右指针
    min_len = float("inf")  # 初始化最小子串长度为正无穷
    min_substr = ""  # 初始化最小子串为空字符串

    # 遍历字符串 a
    while right < len(a):
        # 当前子串为 a[left:right + 1]
        # 如果当前子串包含 b 和 c 的所有字符
        if contains_substring(a[left:right + 1], b) and contains_substring(a[left:right + 1], c):
            # 如果当前子串长度小于已知的最小子串长度,则更新最小子串长度和最小子串
            if right - left + 1 < min_len:
                min_len = right - left + 1
                min_substr = a[left:right + 1]
            # 如果当前子串长度等于已知的最小子串长度,但字典序较小,则更新最小子串
            elif right - left + 1 == min_len and a[left:right + 1] < min_substr:
                min_substr = a[left:right + 1]
            left += 1  # 移动左指针
        else:
            right += 1  # 移动右指针

    return min_substr if min_substr else "No"  # 如果找到了满足条件的子串,返回该子串,否则返回 "No"

a = 'abcd'
b = 'ab'
c = 'bc'
print(min_substring(a, b, c))  # 输出: abc

这段代码定义了一个名为min_substring的函数,该函数接受三个字符串a、b和c作为参数,并返回a的满足题目要求的最小子串。

函数内部首先定义了一个名为contains_substring的辅助函数,用于检查一个字符串是否包含另一个字符串的所有字符。

接下来,使用双指针滑动窗口算法,在字符串a中查找满足条件的最小子串。

如果找到了满足条件的子串,则返回该子串,否则返回"No"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 17:05:45 | 显示全部楼层
想看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 20:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表