欢迎光临
我们一直在努力

字符串子序列

"""
字符串子序列
给定字符串s1和s2,判断s1是否为s2的子序列:
两个字符串中仅包含英文小写字母。
字符串s2可能会很长,s1是个短字符串。
字符串的一个子序列是原始字符串删除一些(也可不删)字符,
而不改变剩余字符相对位置形成的新字符串。
比如,xzp是xyzop的一个子序列,而xpy不是。
"""

def get_char_index(s):
    """
    构建字符在字符串s中的索引字典。

    :param s: 输入的字符串
    :return: 字符索引字典,键为字符,值为该字符在字符串s中所有出现位置的列表
    """
    index = {}
    for i, item in enumerate(s):
        index.setdefault(item, [])
        index[item].append(i)
    return index

def is_subsequence(s1, s2):
    """
    判断字符串s1是否为字符串s2的子序列。

    :param s1: 待判断的子序列
    :param s2: 主字符串
    :return: 布尔值,如果s1是s2的子序列,则返回True,否则返回False
    """
    char_index = get_char_index(s2)
    pre_index = -1
    for item in s1:
        if item not in char_index:
            return False
        for index in char_index[item]:
            if index > pre_index:
                pre_index = index
                break
        else:
            return False
    return True

if __name__ == '__main__':
    s1 = "xzp"
    s2 = "xyzop"
    print(is_subsequence(s1, s2))
赞(0) 打赏
未经允许不得转载:创想未来 » 字符串子序列

评论 抢沙发

评论前必须登录!

 

更好的Python学习

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册