题目14
题目描述:
单词接龙的规则是:
可用于接龙的单词,首字母必须要与前一个单词的尾字母相同;
当存在多个首字母相同的单词时,取长度最长的单词;
如果长度也相等,则取字典序最小的单词;
已经参与接龙的单词不能重复使用;
现给定一组全部由小写字母组成的单词数组,
并指定其中一个单词为起始单词,进行单词接龙,
请输出最长的单词串。
单词串是单词拼接而成的,中间没有空格。
单词个数 1 < N < 20
单个单词的长度 1 ~ 30
输入描述
输入第一行为一个非负整数
表示起始单词在数组中的索引k0 <= k < N
输入的第二行为非负整数N
接下来的N行分别表示单词数组中的单词
输出描述
输出一个字符串表示最终拼接的单词串
输入
0
6
word
dd
da
dc
dword
d
输出
worddwordda
<?php $k=fgets(STDIN); $n=fgets(STDIN); $w=[]; for ($i=0;$i<$n;$i++){ $w[]=fgets(STDIN); } solution($k,$w); function solution($k,$w) { $temp=$w[$k]; unset($w[$k]); $tail=substr($temp,-1,1); $res[]=$temp; while (getStr($w,$tail)!=null){ $str=getStr($w,$tail); $res[]=$str; foreach ($w as $k=>$v){ if($v==$str) unset($w[$k]); } $tail=substr($str,-1,1); } echo implode('',$res); } function getStr($list,$tail){ $set=[]; foreach ($list as $v){ if($tail==substr($v,0,1)){ $set[]=$v; } } if(count($set)==0) return null; $res=''; $max=0; foreach ($set as $v){ if(strlen($v)>$max){ $max=strlen($v); $res=$v; } } return $res; }
上述代码有一些小问题,未解决。。。

浙公网安备 33010602011771号