华为OD -单词接龙(Python)

2023-11-17

单词接龙

  1. 题目描述

单词接龙的规则是:

可用于接龙的单词,首字母必须要与前一个单词的尾字母相同;

当存在多个首字母相同的单词时,取长度最长的单词;

如果长度也相等,则取字典序最小的单词;

已经参与接龙的单词不能重复使用;

现给定一组全部由小写字母组成的单词数组,

并指定其中一个单词为起始单词,进行单词接龙,

请输出最长的单词串。

单词串是单词拼接而成的,中间没有空格。

单词个数 1 < N < 20

单个单词的长度 1 ~ 30

  1. 输入描述

输入第一行为一个非负整数

表示起始单词在数组中的索引k

0 <= k < N

输入的第二行为非负整数N

接下来的N行分别表示单词数组中的单词

  1. 输出描述

输出一个字符串表示最终拼接的单词串

示例一

输入

0
6
word
dd
da
dc
dword
d

输出

worddwordda

示例一

输入

4
6
word
dd
da
dc
dword
d

输出

dwordda
  1. 上代码

# !E:\pythonScript\venv python3
# -*- coding: utf-8 -*-
"""
Date: 2023/3/15
Time: 15:20
Author: kang
"""
def chains(start_index, words):
    builder = []
    builder.append(words[start_index])
    words.pop(start_index)
    words.sort(key=lambda x: (-len(x), x)) #第一个关键字是按字符串长度排序,通过 -len(x) 实现。因为默认情况下 sorted 函数是按升序排列的,因此需要使用负数来表示降序排列。
    while True:
        length = len(builder)
        last_word = builder[-1][-1]
        for i in range(len(words)):
            w = words[i]
            if w.startswith(last_word):
                builder.append(w)
                words.pop(i)
                break
        if len(builder) == length:
            break
        print(''.join(builder))


if __name__ == "__main__":
    start_index = int(input())
    number_word = int(input())
    words = []
    for i in range(number_word):
        words.append(input())
    chains(start_index, words)
  1. 代码解释:

while这段代码实现了单词拼接的核心逻辑。具体来说,代码中的 while 循环会不断尝试在 builder 中添加新的单词,直到无法添加为止。循环中的每一轮通过查找以上一个单词结尾的单词来进行拼接,具体实现如下:

  • length = len(builder):记录循环开始前字符串 builder 的长度。

  • last_word = builder[-1][-1]:获取当前 builder 中最后一个单词的最后一个字符,用于作为下一个待拼接单词的匹配条件。

  • for i in range(len(words)): ...:遍历所有未使用的单词,查找以 last_word 开头的单词。

  • w = words[i]:获取当前待匹配的单词。

  • if w.startswith(last_word): ...:如果当前单词以 last_word 开头,则将其添加到 builder 中,并从 words 中删除该单词。

  • if len(builder) == length: break:如果当前循环中没有添加新的单词,则退出循环。循环结束后,builder 中包含了所有已经拼接好的单词,将其通过 ''.join(builder) 方法连接起来即可得到最终输出。需要注意的是,在循环过程中可以通过 print(''.join(builder)) 语句输出中间结果,方便调试和理解程序逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为OD -单词接龙(Python) 的相关文章

  • 使用 Python 编辑 RTF 文件

    也许这是一个愚蠢的问题 但我不明白 所以道歉 我有一个 RTF 文档 我想更改它 例如 有一个表 我想复制一行并以面向对象的方式更改代码中第二行中的文本 我认为 pyparsing 应该是可行的方法 但我摆弄了几个小时但没有明白 我没有提供
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • 通过 boto3 承担 IAM 用户角色时访问被拒绝

    Issue 我有一个 IAM 用户和一个 IAM 角色 我正在尝试将 IAM 用户配置为有权使用 STS 承担 IAM 角色 我不确定为什么收到 访问被拒绝 错误 Details IAM 角色 arn aws iam 123456789 r
  • Flask中使用的路由装饰器是如何工作的

    我熟悉 Python 装饰器的基础知识 但是我不明白这个用于 Flask 路由的特定装饰器是如何工作的 以下是 Flask 网站上的代码片段 from flask import Flask escape request app Flask
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • 如何调整 matplotlib 单选按钮的大小和纵横比?

    我已经尝试了几个小时来使简单的单选按钮列表的大小和纵横比正确 但没有成功 首先 导入模块 import matplotlib pyplot as plt from matplotlib widgets import RadioButtons
  • Python re无限执行

    我正在尝试执行这段代码 import re pattern r w w s re compiled re compile pattern results re compiled search COPRO HORIZON 2000 HOR p
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 从 pyspark.sql 中的列表创建数据框

    我完全陷入了有线的境地 现在我有一个清单li li example data map lambda x get labeled prediction w x collect print li type li 输出就像 0 0 59 0 0
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • python celery -A 的无效值无法加载应用程序

    我有一个以下项目目录 azima init py main py tasks py task py from main import app app task def add x y return x y app task def mul
  • OpenCV 跟踪器:模型未在函数 init 中初始化

    在视频的第一帧 我运行一个对象检测器 它返回对象的边界框 如下所示
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • PIL.Image.open和tf.image.decode_jpeg返回值的区别

    我使用 PIL Image open 和 tf image decode jpeg 将图像文件解析为数组 但发现PIL Image open 中的像素值与tf image decode jpeg不一样 为什么会出现这种情况 Thanks 代
  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt

随机推荐

  • 计算机必知必会:进程process与线程thread

    进程和线程这对概念的理解也是很难的 至今网络上可查的资料对其的理解出入都挺大 在不同的操作系统中 如linux和windows中 其概念和实现都是有出入的 因此 我在这里结合我自己的理解谈下这两个概念 讲的都是一般性的概念 并且主要是基以W
  • pandas报错:columns overlap but no suffix specified

    使用pandas的join连接两张表 例如表1是left 表2是right 这两张表都有共同的字段user name 我就以user name这个字段连接这两张表 left join right how left on user name
  • 2018.09.29 学习笔记 // 前端Javascript // 日期、Math、数组与对象API

    题目 答案见后面 获取2018 09 29格式的日期 获取随机数 要求是长度一直的字符串格式 写一个能遍历对象的数组的通用forEach函数 日期和Math var a Date now 获取当前时间毫秒数 从1970年到现在走了多少毫秒
  • 使用Matlab实现基于计算机视觉的DIP芯片缺陷检测系统附带GUI界面

    使用Matlab实现基于计算机视觉的DIP芯片缺陷检测系统附带GUI界面 计算机视觉在工业生产中的应用越来越广泛 其中一项重要的应用是对芯片制造过程中的缺陷进行检测 本文将介绍如何使用Matlab实现一个基于计算机视觉的DIP芯片缺陷检测系
  • pythonnone赋值-【零基础学Python】def语句,参数和None值

    像之前的print input 和len 功能 Python提供了一些类似的内置函数 另外也可以自己编写自定义函数 示例 def hello print Howdy print Howdy print Hello there hello 第
  • 刷脸支付商户流水不断服务商收益不断

    刷脸支付的管道红利 刷脸支付是获利的其实刷脸支付的商业模式本质上也是一种管道收入 通过一家商户的流水得到佣金 十家商户 N家商户 开通刷脸支付的商户越多 佣金就越多 可以赚取的收益也就越多 就正如管道一样 只要商家在营业 那么你的收入就源源
  • 初识数据库-mysql

    初识数据库 不同的数据库 sql语句不一样 总体大致差不多 数据存储的简短回顾 在内存中临时存储数据所需 变量 数组 长度不可变 类型太单一 对象 对象数组 近乎解决了数组类型太单一的问题 集合 解决了数组长度不可变 持久存储数据 I O
  • 应用层协议 --- DNS协议

    DNS Domain Name Service 域名服务 DNS协议基于UDP 使用端口号53 由数字组成的 IP 地址很难记忆 所以我们上网使用网站 IP 地址的别名 域名 实际使用中 域名与 IP 地址是对应的 这种对应关系保存在DNS
  • 【前端面经】JS-如何使用 JavaScript 来判断用户设备类型?

    在 Web 开发中 有时需要针对不同的设备类型进行不同的处理 例如 对于移动设备 我们可能需要采用不同的布局或者交互方式 以提供更好的用户体验 因此 如何判断用户设备类型成为了一个重要的问题 1 使用 navigator userAgent
  • python优雅地爬虫

    申明 仅用作学习用途 不提供任何的商业价值 背景 我需要获得新闻 然后tts 在每天上班的路上可以听一下 具体的方案后期我也会做一次分享 先看我喜欢的万能的老路 获得html内容 gt python的工具库解析 获得元素中的内容 完成 好家
  • 『Newsletter丨第一期』PieCloudDB 新增自动启停、预聚集、试用规则优化、费用中心等多项功能模块...

    第一部分 PieCloudDB 最新动态 PieCloudDB 完成多个产品兼容性认证 PieCloudDB 与多家基础架构软件厂商完成产品兼容性认证 类别包括操作系统 服务器 CPU 云平台 新增 8 家生态伙伴 包括龙蜥 麒麟 中科可控
  • c语言求fibonacci数列前20,求fibonacci数列的前20个数之和

    使用数组求Fibonacci数列的前20项 要求4项一行输出 斐波那契数列通项公式 斐波那契数列指的是这样一个数列 1 1 2 3 5 8 13 21 这个数列从第三项开始 每一项都等于前两项之和 includeintmain inta 2
  • 容斥原理——经典例题(组合数学)

    一 容斥原理 就是人们为了不重复计算重叠部分 想出的一种不重复计算的方法 先来认识一下这两个符号 与 如图 蓝色的圈就是c1c2 红色的圈围起来的就是c1c2 二 例题 组合数学 1 题目 1 1 题目描述 八是个很有趣的数字啊 八 发 八
  • Centos nginx配置文档

    1 安装nginx yum install nginx 2 Nginx常用命令 查看版本 nginx v 启动 nginx c etc nginx nginx conf 重新加载配置 nginx s reload 停止 nginx s st
  • Bat批处理使用ren批量重命名文件,比如批量去掉文件名称的前4位

    从手机下导入一批照片到电脑 照片开头都是以IMG 开头 甚是烦 使用ren可以批量去掉IMG 开头的几个字符 参考如下 去掉文件名称的最前面4位 去掉文件名称的最后5位 去掉的5位包括 jpg这四个后缀 echo off Deep Lee
  • OCR文字检测主要算法

    转载 https www mayi888 com archives 60604 文字检测是文字识别过程中的一个非常重要的环节 文字检测的主要目标是将图片中的文字区域位置检测出来 以便于进行后面的文字识别 只有找到了文本所在区域 才能对其内容
  • 西门子 PLC S7单边通信

    PLC通信 1 组态 编程 1 打开博途软件 创建新项目 命名为 通信 2 添加新设备 命名为A 这里选择的是CPU1211C 版本V4 2 3 CPU属性设置 启用系统存储器字节和时钟存储器字节 4 以太网地址设置 IP地址设为 192
  • 一文说明白SMC继电器的三种模式:迟滞模式,窗口模式,报警模式

    阅读时间5分钟 有不少同学表示 不理解迟滞模式 窗口模式 报警模式 这里花点儿时间说明一下 这三种模式按照难易程度 1 报警模式 这种方式顾名思义 到压力报警 回到正常范围 报警消除 简单易懂 不过 如果我们需要的压力是0 7MPa 那么我
  • Java坑人面试题系列: 变量声明(中级难度)

    作用域规则与变量覆盖面试题 Java Magazine上面有一个专门坑人的面试题系列 https blogs oracle com javamagazine quiz 2 这些问题的设计宗旨 主要是测试面试者对Java语言的了解程度 而不是
  • 华为OD -单词接龙(Python)

    单词接龙 题目描述 单词接龙的规则是 可用于接龙的单词 首字母必须要与前一个单词的尾字母相同 当存在多个首字母相同的单词时 取长度最长的单词 如果长度也相等 则取字典序最小的单词 已经参与接龙的单词不能重复使用 现给定一组全部由小写字母组成