手机版 | 登陆 | 注册 | 留言 | 设首页 | 加收藏
当前位置: 网站首页 > python教程 > 文章 当前位置: python教程 > 文章

python题目及答案对程序解释并做出答案基础python题目搜索软件

时间:2022-07-30    点击: 次    来源:网络    作者:佚名 - 小 + 大

python题目及答案对程序解释并做出答案基础python题目搜索软件


下载地址

https://share.weiyun.com/OvviwGnZ


资料目录
Python练习集100题
100道Python面试题
Python100经典练习题
Python经典题目100道题
Python题库(已收录100道真题)
Python100例视频讲解课程
菜鸟教程Python教程100例
130道python练习题,涵盖基础内容的方方面面
Python考试题复习知识点试卷试题
PYTHON测试题和答案
python第一阶段考试题
Python经典面试题和答案解析
python期末考试复习试卷
python习题集大全(附答案解析)
老男孩Python全栈7期练习题(面试真题模拟)
尚观python第一阶段考试(面试真题模拟)
《Python程序设计基础与应用》习题答案
《Python快速编程入门》——课后题答案
Python编程基础张健 , 张良均课后习题及答案
Python程序设计基础及实践(慕课版)郭炜习题答案
Python程序设计基础习题答案与分析
python基础试题(含答案)

举例

不同的子序列(超出时间限制)
题目要求
给定一个字符串S和一个字符串T,计算S的子序列中T出现的次数。
一个串的子串是指该串的一个连续的局部,如果不要求连续,则可称为它的子序列。例如abcde, acd就是abcde的一个子序列
假设 S = "rabbbit", T = "rabbit",那么有 3 种可以从 S 中得到 "rabbit" 的方案。
(上箭头符号 ^ 表示选取的字母)
rabbbit
^^^^ ^^
rabbbit
^^ ^^^^
rabbbit
^^^ ^^^
思路分析
当分析问题遇到阻碍,我最喜欢从问题的边界处入手,因为边界的地方正是条件达到极值的时候,这时候,很容易就找出破绽。
T的首字母是r, 这个r恰好也是S的首字母,如果让S = "abbbitr" ,让r成为S的末尾字符,问题似乎一下子变得明朗起来,此时,S的任意子序列都不可能是“rabbit“, 因为S中r字符后的后面没有内容了,根本找不到”abbit“,顺着这个思路想下去,想从S的子序列中找到T,就必须满足S中,r的后面可以找到a,a的后面可以找到b,b的后面可以再找到一个b,b的后面可以找打一个i,i的后面可以找到t。
但这样找还是挺麻烦的,为何不把T中每个字符出现在S中的位置记录下来呢?r出现在0的位置上,b出现在2, 3, 4的位置上,用一个字典来保存T中字符在S中出现位置的信息:
{
    'a': [
        1
    ],
    'i': [
        5
    ],
    'r': [
        0
    ],
    'b': [
        2,
        3,
        4
    ],
    't': [
        6
    ]
}
T = "rabbit",上面已经得到每一个字符在S中的位置,i从0到5,根据字符的位置信息挑选T[i]在S中的的合适位置,比如r,它出现的位置信息是[0],只能挑选一个位置,但是b 的位置信息是[2, 3, 4] ,有三个位置可以挑选,需要注意的是,如果T[i]这个字符挑选了位置index,那么T[i+1]这个字符在挑选位置时就不能选小于等于index。假如S=”brabbbit“, 那么在选b的位置的时候,就不能要0这个位置,因为T中a在b的前面,a已经选了2这个位置,b选到0毫无意义,这样不能构成子序列。
分析到这里,就演变成了一个寻找排列组合的问题。
示例代码
# coding=utf-8


def num_sequence(source, target):
    # 先得到target的每一个字符在source中出现的位置信息
    index_dict = {}
    for sub_item in target:
        index_dict[sub_item] = []
        for index, item in enumerate(source):
            if sub_item == item:
                index_dict[sub_item].append(index)

    print(index_dict)
    index_seq = get_num_sequence(target, 0, index_dict, -1)
    print(index_seq)

def get_num_sequence(target, t_index, index_dict, s_index):
    """

    :param target: 目标字符串
    :param t_index: 目标字符在target中的位置
    :param index_dict: 目标字符串中每个字符在source中的位置
    :param s_index: 上一个目标字符在S中的位置
    :return:
    """
    item = target[t_index]
    # 如果目标字符在S中不存在
    if item not in index_dict:
        return []

    # 得到item在S中的位置信息
    index_lst = index_dict[item]
    seq_lst = []
    for index in index_lst:
        # 如果位置比上一个目标字符所选的位置靠前或相等,就不能选
        if index <= s_index:
            continue
        # 如果目标字符已经是最后一个字符了
        if t_index == len(target) - 1:
            seq_lst.append([index])
        else:
            # 递归调用,寻找下一个目标字符可能的位置
            num_seq = get_num_sequence(target, t_index+1, index_dict, index)
            for lst in num_seq:
                lst.insert(0, index)
                seq_lst.append(lst)
    return seq_lst


if __name__ == '__main__':
    source = "aabdbaabeeadcbbdedacbbeecbabebaeeecaeabaedadcbdbcdaabebdadbbaeabdadeaabbabbecebbebcaddaacccebeaeedababedeacdeaaaeeaecbe"
    target = "bddabdcae"
    num_sequence(source, target)

上一篇:python练习工具python练习卷菜鸟教程python练习

下一篇:没有了

推荐阅读
声明 | 联系我们 | 关于我们
备案ICP编号  |   QQ:2151239526  |  地址:北京市东城区  |  电话:16605168200  |