课堂练习01题目:计算最长英语单词链

大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有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 @ 2023-03-02 18:49  一个小虎牙  阅读(20)  评论(0编辑  收藏  举报