单词接龙

 单词接龙的规则是:
  可用于接龙的单词首字母必须要前一个单词的尾字母相同
  当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用
  现给定一组全部由小写字母组成单词数组,并指定其中的一个单词作为起始单词,进行单词接龙,
  请输出最长的单词串,单词串是单词拼接而成,中间没有空格
 输入描述:
  输入的第一行为一个非负整数,表示起始单词在数组中的索引K,0 <= K < N
  输入的第二行为一个非负整数,表示单词的个数N;
  接下来的N行,分别表示单词数组中的单词
 备注:
  单词个数N的取值范围为[1,20];
  单个单词的长度的取值范围为[1,30]
 输出描述:输出一个字符串,表示最终拼接的单词串


//存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词
//接龙的单词首字母必须要前一个单词的尾字母相同
import java.util.*;

public class Main{
    static boolean[] used;
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        //起始索引
        int startIndex = sc.nextInt();
        //数组长度
        int len = sc.nextInt();
        sc.nextLine();
        List<String> words = new ArrayList<>();
        for(int i = 0;i < len;i++){
            words.add(sc.nextLine());
        }
        
        StringBuffer res = new StringBuffer(words.get(startIndex));
        //记录结尾字母
        char end = words.get(startIndex).charAt(words.get(startIndex).length() - 1);
        String m = words.get(startIndex);
        //数组做使用的标记
        used = new boolean[len];
        words.sort((a,b)->{
           if(a.length() != b.length()){
               //按长度
               return b.length() - a.length();
           }else{
               //按字典序
               return a.compareTo(b);
           }
        });
        for(int i = 0;i < words.size();i++){
            if(words.get(i).equals(m)){
                used[i] = true;
                break;
            }
        }
        dfs(0,words,res,end);
        
        System.out.print(res.toString());
    }
    
    public static void dfs(int start,List<String> words,StringBuffer res,char end){
        for(int i = 0;i < words.size();i++){
            //没使用过
            if(!used[i]&&words.get(i).charAt(0) == end){
                res.append(words.get(i));
                used[i] = true;
                end = words.get(i).charAt(words.get(i).length() - 1);
                dfs(0,words,res,end);
                break;
            }
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 📝单词接龙 题目描述 来玩玩单词接龙吧!规则如下:🔠 可用于接龙的单词,首字母必须要与前一个单词的尾字母相同;👑 ...
    梦想橡皮擦阅读 202评论 0 0
  • 拉姆刚开始学习英文单词,对单词排序很感兴趣。如果给拉姆一组单词,他能够迅速确定是否可以将这些单词排列在一个列表中,...
    stevewang阅读 2,266评论 5 2
  • 题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWo...
    环宇飞杨阅读 296评论 0 0
  • 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列...
    lxy燊燊阅读 298评论 0 1
  • 10.06 [codevs] 单词接龙题记 题目: 题目描述 Description 输入描述 Input Des...
    Sari阅读 1,048评论 0 0

友情链接更多精彩内容