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

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

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

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

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

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

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

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

     

     

    本人思路:上课时的思路是 读取了文件中的单次之后 从第一个单词开始统计接龙的单词个数,将每个单词的接龙单词数录入到一个整数数组里,然后计算数组的最大值,再输出产生数组最大值的接龙单词

    但是绕来绕去把自己给绕晕了,最终没能实现。

     

    然后我再网上看了别人的思路:

    import java.awt.geom.Area;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.OutputStream;
    
    public class dancilian {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    //String[] A={"apple","zoo","elephant","under","fox","dog","moon","leaf","tree"};
    dancilian a=new  dancilian();
    File file = new File("F:/input1.txt");
    String b=a.read(file);
    String[] A =b.split(" ");
    
    String[] f;
    String[] l;
    String[] end;
    f=a.first(A);
    l=a.last(A);
    end=a.jielong(A, l, f);
    
    for(int i=0;i<3;i++)
    System.out.println(end[i]);
    try {
        a.write(end);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        }
        public String[] first(String[] A)//返回首字母数组
        {
            String[] F= new String[A.length];
            for(int i=0;i<A.length;i++)
            {
                F[i]=A[i].substring(0,1);
                }
            return F;
            
        }
        
        public String[] last(String[] A)//返回尾字母数组
        {
            String[] L= new String[A.length];
            for(int i=0;i<A.length;i++)
            {
                L[i]=A[i].substring(A[i].length()-1);
                }
            return L;
            
        }
    public String[] jielong(String[] A,String[] L,String[] F)//获取接龙字母
    {
        String[] end=new String[A.length];
        int  k=0;
             end[0]=A[0];
             for(int j=0;j<A.length;j++)
             {
                 
             if((end[k].substring(end[k].length()-1)).equals(F[j]))
             {
                 //System.out.println(end[k].substring(end[k].length()-1));
                     end[++k]=A[j];
             
             }
             }
             
        return end;
        
    }
    public String read(File file){//读出文件
        StringBuilder result = new StringBuilder();
        try{
            BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
            String s = null;
            while((s = br.readLine())!=null){//使用readLine方法,一次读一行
                result.append(System.lineSeparator()+s);
            }
            br.close();    
        }catch(Exception e){
            e.printStackTrace();
        }
        return result.toString();
    }
    public void write(String[] str) throws Exception{//写入文件
        //在d盘上创建一个名为testfile的文本文件
        File f = new File("F:/output1.txt");
        //用FileOutputSteam包装文件,并设置文件可追加
        OutputStream out = new FileOutputStream(f,true);
        //字符数组
        //String[] str = {"shanghai","beijing","guangdong","xiamen"};
        for(int i=0; i<str.length; i++){
        out.write(str[i].getBytes()); //向文件中写入数据
        out.write('
    '); // 
    表示换行
        out.write('
    '); 
        }
        out.close(); //关闭输出流
        System.out.println("写入成功!");
        }
    }
  • 相关阅读:
    多线程2
    多线程1
    Mybatis动态代理开发
    Mybatis的mapper.xml文件也是要加文件头的
    ssm框架只使用mybatis配置sqlmapconfig.xml
    ssm整合之web.xml配置
    SpringMVC三大组件的配置
    spring开启注解配置
    如何开发 Sublime Text 2 的插件
    ASP.NET MVC 5改进了基于过滤器的身份验证
  • 原文地址:https://www.cnblogs.com/quyangzhangsiyuan/p/11031931.html
Copyright © 2011-2022 走看看