zoukankan      html  css  js  c++  java
  • 计算最长单词链

    题目:

    大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有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("运行成功!");
        }
    }

    运行截图:

  • 相关阅读:
    Spring Boot 启动加载数据 CommandLineRunner(一般用于项目启动时,用户信息的缓存)
    缓存穿透、缓存并发、缓存失效之思路变迁
    知识点的梳理
    windows下查找java应用占用CPU过高问题
    Java开发中的Memcache原理及实现
    malloc函数详解 C语言逻辑运算符
    PCH 警告:标头停止点不能位于宏或#if块中
    绪论-第一章-《数据结构题集》
    线性表的顺序存储结构--用数组实现
    第二章 《C++ Primer Plus》
  • 原文地址:https://www.cnblogs.com/Qi77/p/11062135.html
Copyright © 2011-2022 走看看