python练习题_Python随笔37:Python基础编程练习题39~40

:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。

aeb4d650ff8cdfdee2f0faf06cf77846.png

Python编程练习

Python基础练习题39:最长的字母升序子字符串

输入一个字符串,该字符串只含有26个小写字母,如s = 'azcbobobegghakl'。在字符串s中,有若干个按字母顺序排序的子字符串,比如'az'、'bo'、'be'、'beggh'、'akl'等。

现要求写一个程序,输出字符串s中按字母升序的最长的子字符串。上面例子中,最长者'beggh'就是所求的。

若有多个相同长度的最长子字符串,取起始索引最靠前的那一个。比如,如果输入的字符串是s = 'abcbcd', 那么输出的子字符串就应该是'abc'。

输入样例:

azcbobobegghakl

输出样例:

按字母升序最长的子字符串是:beggh

输入样例:

abcdafgh

输出样例:

按字母升序最长的子字符串是:abcd

解答:本题比较有挑战性。 解题分两步走:

第一步,找出符合条件的符合条件的s的子字符串。

第二步,比较各符合条件的各个子字符串的长度,取其中最长者。

第一步是难点所在。而要确定子字符串,需要知道其起始索引和结束索引,而关键在于如何确定结束索。我们可以设起始索引为i,然后加一个while循环,设定循环条件为s[i] <= s[i+1],即可达到目的。

需要注意的是,很容易出现string index out of range这类错误,因此要对i的取值范围做一些限制。

s = input()sub = ''ans = ''for i in range(len(s)):    m = i  # 符合条件的s子字符串的起始索引。    while i < len(s) - 1 and s[i] <= s[i+1]:        i += 1    n = i + 1  # 符合条件的s的子字符串的结束索引。             sub = s[m:n]  # 输出符合条件的s的子字符串。    if len(ans) < len(sub):   # 比较各个符合条件的子字符串的长度,取起始索引最靠前的最长者。        ans = sub # 把ans一直赋予最长的子字符串,随着循环遍历后它就是最长的子字符串。print(f'按字母升序最长的子字符串是:{ans}')
Python基础练习题40:两个字符串合并去重输出

输入两个字符串,合并两个字符串,且对两个字符串的共有元素进行去重,生成一个新的字符串。然后再以列表的形式将新字符串内的元素排序之后再输出。

输入格式:

共两行,每一行为一个字符串。

输出格式:

共一行,为一个列表。

输入样例:

abbbccccdefff

输出样例:

['a', 'b', 'b', 'b', 'c', 'd', 'e', 'f', 'f', 'f']

解答:涉及到去重,多数时候可能会用到集合。又因为去重只是对两个字符串的共有元素而言,其余非共有元素依然可能需要重复,且要用到移除元素、排序和重新组合等操作,所以列表也是需要用到的。

a = list(input())b = list(input())S_a = set(a)S_b = set(b)S = S_a & S_b  # S为集合S_a和S_b的交集,S中的元素为列表a、b中的共有元素,且已去重。for i in S:    while i in a:        a.remove(i)  # 移除列表a中的所有a、b共有元素。for i in S:    while i in b:        b.remove(i)  # 移除列表b中的所有a、b共有元素。l = a + b + list(S)  #拼接列表a、b和a、b共有元素去重后组成的列表。print(sorted(l))  # 最后排序输出。

Python基础练习题系列至此暂时告一段落。敬请关注新的内容。

Over.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值