英文单词接龙(华为笔试题)

### 单词接龙,单词首字母是上一个单词结尾字母,如果候选词有多个,则选最长的,若长度相同,按字典序选靠前的


def longest_words(words):
   tmp_words = [[len(w), w] for w in words]
   tmp_words = sorted(tmp_words, key=lambda x: (-1 * x[0], x[1]))
   new_words = [w[1] for w in tmp_words]
   return new_words


def fc(k, n, words):
   # k = int(input())
   # n = int(input())
   # words = []
   use_words = set()
   res = ""
   # for i in range(n):
   #  words.append(input().strip())
   tmp_word = words[k]
   words = [x for x in list(set(words)) if x != tmp_word]
   tmp_dict = {}
   for i in words:
      if i[0] not in tmp_dict:
         tmp_dict[i[0]] = [i]
      else:
         tmp_dict[i[0]].append(i)
   for k in tmp_dict:
      tmp_dict[k] = longest_words(tmp_dict[k])
   print(tmp_dict)
   while 1:
      if tmp_word not in use_words:
         res += tmp_word
         use_words.add(tmp_word)
         tmp_alpha = tmp_word[-1]
         if tmp_alpha in tmp_dict and len(tmp_dict[tmp_alpha]) > 0:
            tmp_word = tmp_dict[tmp_alpha].pop(0)
         else:
            break
      else:
         break
   return res
# 有测试有用例不过
print(fc(0, 10, ['abvce', 'ad', 'ef', 'df', 'f', 'ff', 'fi', 'mh']))

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值