题目14

题目描述:

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

单词个数 1 < N < 20
单个单词的长度 1 ~ 30

输入描述

输入第一行为一个非负整数
表示起始单词在数组中的索引k
0 <= 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;
}

上述代码有一些小问题,未解决。。。

posted @ 2022-07-16 16:02  weigm*  阅读(51)  评论(0)    收藏  举报