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

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务