📜  资质 |门 CS 1998 |第 45 题(1)

📅  最后修改于: 2023-12-03 15:41:49.815000             🧑  作者: Mango

资质 |门 CS 1998 |第 45 题

题目描述

这道题目是计算机科学1998年的门考试第45题。题目要求实现一个函数,给定一个字符串,判断这个字符串是否是另一个字符串的子串。

函数签名
def is_substring(s: str, t: str) -> bool:
    pass
示例
s = "adam"
t = "madam"
print(is_substring(s, t))  # True

s = "world"
t = "hello world"
print(is_substring(s, t))  # True

s = "apple"
t = "banana"
print(is_substring(s, t))  # False
思路解析

这道题目还是比较简单的,可以采用 brute force 的方法。具体来说,将被判断的字符串的每个字符作为子串的开头,对于每个开头位置,判断这个位置对应的子串是否和目标字符串相同即可。

具体代码实现和注释如下:

def is_substring(s: str, t: str) -> bool:
    """
    判断字符串 s 是否是字符串 t 的子串。
    """
    s_len = len(s)
    t_len = len(t)

    # 遍历所有可能的子串开头位置
    for i in range(t_len - s_len + 1):
        # 判断每个位置对应的子串是否和 s 相同
        if t[i:i + s_len] == s:
            return True
   
    # 如果遍历完所有的子串,都没有找到 s,则说明 s 不是 t 的子串
    return False
总结

这道题目虽然简单,但是也是很有代表性的一道问题。实现一个判断字符串是否是子串的函数在很多实际应用场景非常有用,因此大家可以将这个代码片段存储下来,以便日后使用。