9.单词接龙

单词接龙的规则是可用于接龙的单词 首字母必须要与前一个单词的尾字母相同,当存在多个首字母相同的单词时
取长度最长的单词,如果长度也相等,则取字典序最小的单词,已经参与接龙的单词不能重复使用。

现给定一组全部由小写字母组成的单词数组,并指定其中一个单词为起始单词,进行单词接龙
请输出最长的单词串,单词串是单词拼接而成的中间没有空格

输入描述
输入第一行为一个非负整数,表示起始单词在数组中的索引k     0<=k<N
输入的第二行为非负整数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<N<20
单个单词的长度  1~30

 

点击查看代码

import java.util.*;

public class Demo9 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        //接收输入参数
        int  k = Integer.parseInt(sc.nextLine());
        int N = Integer.parseInt(sc.nextLine());

        ArrayList<String> list = new ArrayList<>();
        for(int i = 0; i < N; i++){
            list.add(sc.nextLine());
        }

        //确定好初始String以及tail
        String temp = list.get(k);
        list.remove(temp);
        char tail = temp.charAt(temp.length() - 1) ;

        //结果存储在res中
        ArrayList<String> res = new ArrayList<>();
        res.add(temp);
        while(getStr(list, tail) != null){
            String str = getStr(list, tail);
            res.add(str);
            list.remove(str);
            tail = str.charAt(str.length() - 1);
        }

        for(String s : res){
            System.out.print(s);
        }
    }

    //辅助函数,ArrayList是引用数据类型;将计算处理过程独立出来,主函数只需写逻辑过程
    private static String getStr(ArrayList<String> list, char tail){
        TreeSet<String> set = new TreeSet<>();
        for(String s : list){
            if(s.charAt(0) == tail){
                set.add(s);
            }
        }

        if(set.size() == 0){
            return null;
        }

        String res = "";
        int max = 0;
        for(String s : set){
            if(s.length() > max){
                max = s.length();
                res = s;
            }
        }
        return res;
    }
}

 

总结:要有良好的抽象能力,将整体和局部的关系拿捏好。
          整体处理框架,写逻辑过程;局部独立出作为辅助函数,处理关键步骤的计算。

posted @ 2022-03-24 22:25  Jukim  阅读(1307)  评论(0编辑  收藏  举报