计算最长单词链

题目:

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

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

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

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

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

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

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

设计思想:

首先需要利用查找一个字符串(本题指单词)首尾字母的函数,刚开始自己选择的是substring(x,y),但是一直报错没有解决,后来询问同学,又学习了一种新的方法subSequence(),解决了这个问题。

源代码:

package test03;

/*
 * 英语成语接龙
 * 
 * 读入input文件
 * 输出output文件
 * 第一单词尾字母
 * 其他单词首字母
 * 
 */
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;

public class test03 {

    public static void main(String[] args) throws IOException {
        File file = new File("D:\\JAVA\\java-1\\test02\\input.txt");// 读取文件
        if (!file.exists()) {// 如果文件打不开或不存在则提示错误
            System.out.println("文件不存在");
            return;
        }
        String[] strs=new String[1000000];
        Scanner x = new Scanner(file);
        int i=0;
        while(x.hasNext()) {
            strs[i]=x.next();
            i++;
        }
        String sentence = "";
        String word="";
        for(int m=0;m<i;m++) {
            sentence = strs[m];
            if(strs[m+1]==null)
            {
                System.out.println("文件中单词只有一个"+strs[m]+",字母成语接龙不能进行!");
            }
            word = sentence;
            for(int j=m+1;j<i;j++) {
                if(strs[j].toLowerCase().subSequence(0, 1).equals(word.toLowerCase().subSequence(word.length()-1, word.length()))) {
                    word = strs[j];
                    sentence+="->"+word;
                }
            }
            if(sentence.indexOf("-")!=-1) {
                   String strOut = "D:\\JAVA\\java-1\\test02\\output.txt";
                   File file1 = new File(strOut);
                   if (!file1.exists()) {// 如果文件打不开或不存在则提示错误
                       System.out.println("文件不存在");
                       return;
                   }
                   FileOutputStream fos=new FileOutputStream(file1);
                   OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
                   osw.append(sentence);
                   osw.close();
                   fos.close();
                   break;
            }
            
        }
        System.out.println("运行成功!");
    }
}

运行截图:

原文地址:https://www.cnblogs.com/Qi77/p/11062135.html