python单词接龙 后一个字符串前缀是前一个字符串后缀

参加机试,遇到一个问题,不会解答,请问各位大神有没有好的解法。
最好是用python写的。非常感谢。

        单词接龙的规则是
        可用于接龙的单词 首字母必须要与前一个单词的尾字母相同
        当存在多个首字母相同的单词时,取长度最长的单词
        如果长度也相等,则取字典序最小的单词
        已经参与接龙的单词不能重复使用
        现给定一组全部由小写字母组成的单词数组
        并指定其中一个单词为起始单词
        进行单词接龙
        请输出最长的单词串
        单词串是单词拼接而成的中间没有空格

        输入描述
        输入第一行为一个非负整数
        表示起始单词在数组中的索引k
        0<=k         输入的第二行为非负整数N
        接下来的N行分别表示单词数组中的单词

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

        示例
        0
        6
        word
        dd
        da
        dc
        dword
        d

        输出
        worddwordda
        说明 先确定起始单词word 在接dword
        剩余dd da dc 则取da

       示例2
        4
        6
        word
        dd
        da
        dc
        dword
        d

        输出
        dwordda

        单词个数1         单个单词的长度  1~30

#算法开发##学习路径#
全部评论
有 js 版本
点赞 回复 分享
发布于 2022-04-21 10:08
同样遇到没做出来 def func(f, l):     a = []     for i in l:         a.append(i[0])     if f[-1] not in a:         return f     else:         d = ""         s = 0         for i in range(len(l)):             a = len(d)             b = len(l[i])             if l[i][0] == f[-1] and a < b:                 d = l[i]                 s = i             elif l[i][0] == f[-1] and a == b and sum(ord(l[i][j])*(100**(a-j)) for j in range(a)) < sum(ord(d[j])*(100**(a-j)) for j in range(a)):                 d = l[i]                 s = i             else:                 continue         f += d         l.pop(s)         return func(f, l) k = int(input()) n = int(input()) l = [] for i in range(n):     l.append(input()) f = l[k] l.pop(k) print(l) print(func(f, l))
点赞 回复 分享
发布于 2022-05-18 21:17
golang版本 package main import ( "fmt" ) func main() { ss := []string{"word", "dd", "da", "dc", "dword", "d"} fmt.Println(jielong(ss, 0)) } func jielong(ss []string, firstIdx int) string { first := ss[firstIdx] idx := firstIdx ss = append(ss[:idx], ss[idx+1:]...) res := first for { first, idx = find(ss, first[len(first)-1]) if first != "" { res += first ss = append(ss[:idx], ss[idx+1:]...) } else { break } } return res } func find(ss []string, first byte) (string, int) { best := "" idx := -1 for i := 0; i < len(ss); i++ { if ss[i][0] == first { if best == "" { best = ss[i] } else { if len(ss[i]) == len(best) && ss[i] < best { best = ss[i] idx = i } else if len(ss[i]) > len(best) { best = ss[i] idx = i } } } } return best, idx }
点赞 回复 分享
发布于 2022-05-21 00:21
请问这是第几道题呀
点赞 回复 分享
发布于 2022-05-30 17:10

相关推荐

牛客963010790号:一般是hr拿着老板账号在招人不是真是老板招
点赞 评论 收藏
分享
会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务