英语链的接龙

接龙规则:

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

最长的定义是:最多单词数量,和单词中字母的数量无关。

代码:

package file;
import java.io.*;
import java.util.*;
public class ceshi {
    public static void main(String[] args)throws FileNotFoundException, IOException  {

        File file=new File("D:/《飘》英文版.txt");
        File file2=new File("D:/output3707.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(file2)) ;

            String s="";
            int i,j;
            ArrayList<ArrayList<String>> listall=new ArrayList();
            String key;
            String str;
            while ((str = br.readLine()) != null) {
                s=s+str;
            }
            /* s=br.readLine();*/
            String s2 = s.replaceAll("\\s+", " ");
            System.out.println(s2);
            //将文本文件中的所有信息变为字符串
            String []s1=s2.split(" ");//以空格为分割划分每个单词
            if(s1.length==1)
                System.out.println("单词数为1");
            else
            {

                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;
                    }
                }
                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-02-27 21:31  一统天下。  阅读(26)  评论(0编辑  收藏  举报