剪拼子字符串——常规、另类两种算法解CSDN竞赛第八期第一小题

75 篇文章 0 订阅

【点击此处跳转笔记正文】

Python 官网https://www.python.org/




  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……


剪拼子字符串——
常规、另类两种算法解CSDN竞赛第八期第一小题
(常规 = list ,另类 = dict )


题目描述:

  给你两个字符串ST,让你从S中剪下字符组成T,问是否可行。

在这里插入图片描述


算法解析:

  • 1、如果能剪拼成,t的字符一定全在s中,首先用集合判定。如有not set(t) < set(s)的情形,直接False。

    if not set(t) < set(s):
        return False # 用集合判定最好情形。

  • 2、遍历t,在s中找字符并取出,如不在,return False。
  • 3、完成遍历t,代码全部执行完成,返回True。

常规算法:借助列表

代码


def istext(s, t):
    ''' 判定从s中剪出字符组成t '''
    s, t = list(s), list(t) # 鉴于字符串s.replace('', s)方法会从字符串中清除所有重复的字符,将字符转成list操作。

    for i in t:
        if i in s:
            s.remove(i) # list.remove()方法默认删除index最小的一个元素。
        else:
            return False

    return True


另类算法:借助字典

代码


def istext(s, t):
    ''' 判定从s中剪出字符组成t '''
    t_dict = {} # 初始化t字符数统计字典。
 
    for i in t: # 遍历t统计字符数。
        t_dict[i] = t.count(i)

    for i in t_dict.keys(): # 也可以,in t_dict,直接遍历字典默认遍历键值。遍历t字符统计字典,比对s中有无足够字符。
        if s.count(i) < t_dict.get(i):
            return False

    return True


代码运行效果截屏图片
在这里插入图片描述


回页首

mypycolor完整源码(源码较长,点此跳过源码)

#!/sur/bin/nve python
# coding: utf-8

'''

Tille = '拼接子字符串'

Author = '梦幻精灵_cq'

Date = '2022-11-6'

'''

s, t = 'AbcdFcgcfhhhgcffgGDXJ', 'bAhhhgg'

def istext(s, t):
    ''' 判定从s中剪出字符组成t '''

    if not set(t) < set(s):
        return False # 用集合判定最好情形。

    t_dict = {} # 初始化t字符数统计字典。
 
    for i in t: # 遍历t统计字符数。
        t_dict[i] = t.count(i)

    for i in t_dict.keys(): # 也可以,in t_dict,直接遍历字典默认遍历键值。遍历t字符统计字典,比对s中有无足够字符。
        if s.count(i) < t_dict.get(i):
            return False

    return True


def istext(s, t):
    ''' 判定从s中剪出字符组成t '''

    if not set(t) < set(s):
        return False # 用集合判定最好情形。

    s, t = list(s), list(t) # 鉴于字符串s.replace('', s)方法会从字符串中清除所有重复的字符,将字符转成list操作。

    for i in t:
        if i in s:
            s.remove(i) # list.remove()方法默认删除index最小的一个元素。
        else:
            return False

    return True

if __name__ == '__main__':
    print(f"\n字符串:\n{'':>6}S: {s}\n{'':>6}T: {t}\n{'~'*50}\n\n{'':>6}可以从S剪下字符组成T:{istext(s, t)}\n\n{'~'*50}\n")


回页首

我的HOT博:
    • 4
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 打赏
      打赏
    • 2
      评论
    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    梦幻精灵_cq

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值