计算最长英语单词链

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

统一输入文件名称:input1.txtinput2.txt

统一输出文件名称:output1.txt

output2.txt

程序需要考虑下列异常状况:

例如,文件不存在,你的程序会崩溃么,还是能优雅地退出并给用户提示信息?

如果文件没有任何单词、只有一个单词、没有可以首尾相连的单词,程序应该如何输出?

如果输入文件有一万个单词,你的程序能多快输出结果?

package letteron;
 
import java.io.*;
import java.util.*;
 
 
 
 
public class Letteron {
 
    public static void main(String[] args)throws FileNotFoundException, IOException  {
        // TODO 自动生成的方法存根
 
        File file=new File("F:/java开发/input.txt");
        File file2=new File("F:/java开发/output.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("F:/java开发/output.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();
            }
        }
        }
         
    }

  

原文地址:https://www.cnblogs.com/gkl20173667/p/11066431.html