计算最长单词链

大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最长的定义是:最多单词数量,和单词中字母的数量无关。

首先构思如何编写该题目,首先要获取文件中的字母集合,通过循环嵌套,用key表示尾字母,然后一一使用循环判断是否可以形成链。将形成的链存储到一个总的List中。

随后在经过for循环判断每天链的长度进行比较得出最长的单词链进行输出。添加至文件中。关闭文件。

package file;

 

import java.io.*;

import java.util.*;

 

 

public class Piao {

    public static void main(String[] args) throws FileNotFoundException, IOException {

        // TODO 自动生成的方法存根

 

        File file = new File("D:\\input1.txt");

        File file2 = new File("D:\\output1.txt");

 

 

        if (!file.exists()) {

            System.out.println("文件不存在!");

        } else if (file.exists() && file.length() == 0) {

            System.out.println("文件为空!");

        } //判断是否文件为空

        else {

            BufferedReader br = new BufferedReader(new FileReader(file));

            BufferedWriter bw = new BufferedWriter(new FileWriter("D:/output1.txt"));

 

 

            String s;

            int i, j;

            ArrayList<ArrayList<String>> listall = new ArrayList();

            String key;

            s = br.readLine();

            //将文本文件中的所有信息变为字符串

            String[] s1 = s.split(" ");//以空格为分割划分每个单词

            if (s1.length == 1)

                System.out.println("单词数为1");

            else {

 

                for (i = 0; i < s1.length; i++) {

                    System.out.println(s1[i]);

                }//测试录入

 

                for (j = 0; j < s1.length; j++) {

                    ArrayList<String> list = new ArrayList<String>();

                    key = s1[j].substring(s1[j].length() - 1);

                    list.add(s1[j]);

                    System.out.println("key:" + key);

                    for (i = 1; i < s1.length; i++) {

 

                        if (key.equals(s1[i].substring(0, 1))) {

                            list.add(s1[i]);

                            key = s1[i].substring(s1[i].length() - 1);

                        } else

                            continue;

                    }

                    listall.add(list);

                }

                int max = 0;

                int count = 0;

 

                for (i = 0; i < listall.size(); i++) {

                    if (max < listall.get(i).size()) {

                        max = listall.get(i).size();

                        count = i;

                    }

                }

                System.out.println("排位" + count);

                System.out.println("最长单词链为:");

                for (i = 0; i < listall.get(count).size(); i++) {

                    System.out.println(listall.get(count).get(i));

                    bw.write(listall.get(count).get(i));

                    bw.write(" ");

                }

                br.close();

                bw.close();

            }

        }

    }

 

}

posted @   傲世小苦瓜  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示