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

    实验要求:

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

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

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

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

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

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

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

    设计思路:将文本内的文章分割成单词,并对每个单词向后遍历,定义一个字符串用来储存连接后的单词链,再定义一个字符串用来储存每次遍历后最长的单词链。以此进行遍历整个文档,最后查出最长的英语单词链!并对读取文件加以判断来排除非法情况!

    package text;
    
    import java.io.BufferedInputStream;
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Scanner;
    public class Text66 {
    
    	public static void main(String[] args) throws FileNotFoundException {
    		File file = new File("F:/新建文件夹/tongji/input.txt");// 读取文件
    		if (!file.exists()) {
    			System.out.println("文件不存在");
    			return;
    		}else {
    			if(file.exists() && file.length() == 0) {  
    			    System.out.println("文件为空!");  
    			    return;
    			}  
    		}
    		//long startTime = System.currentTimeMillis();
    		String[] strs=new String[1000000];
    		Scanner x = new Scanner(file);
    		int i=0;
    		boolean flag=false;
    		while(x.hasNextLine()) {
    			String[] str=x.nextLine().split("\W+");
    			for(int ms=0;ms<str.length;ms++) {
    				if(!str[ms].equals("")&&str[ms].length()>2) {
    					flag=false;
    					if(i!=0) {
    						for(int t=0;t<i;t++) {
    							if(!str[ms].equals(strs[t])) {
    								flag=true;
    							}
    						}
    					}else {
    						flag=true;
    					}
    					
    					if(flag) {
    						strs[i]=str[ms];
    						i++;
    					}
    					
    				}
    				
    			}
    		}
    		if(i==1) {
    			System.out.println("该文件只有一个单词!无法实现词语接龙");
    		}
    		String sentence = "";
    		String word="";
    		String max="";
    		for(int m=0;m<i;m++) {
    			sentence = 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) {
    				if(sentence.length()>max.length()) {
    					max = sentence;
    				}
    			}
    			
    		}
    		//long endTime = System.currentTimeMillis();
    		//System.out.println(endTime-startTime+"ms");
    		//System.out.println(i);
    		if(max.length()!=0) {
    			System.out.println(max);
    			InputStream in = new ByteArrayInputStream(max.getBytes());
    			BufferedInputStream bips = new BufferedInputStream(in);
    			int len;
    			byte[] b = new byte[8192];
    			OutputStream out = null;
    			try {
    				out = new FileOutputStream(new File(
    						"F:/新建文件夹/tongji/output.txt"));
    				len = bips.read(b);
    				if (len > 0) {
    					out.write(b, 0, len);
    				}
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			try {
    				out.close();
    				bips.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}else {
    			System.out.println("没有收尾相连的单词");
    		}
    		
    	}
    }
    

      实验截图(文档内只有三个首尾不相连的单词):

  • 相关阅读:
    shell中的$()、${}、$(())、(())
    阿拉伯数字转中文大写数字的JS
    Oracle创建新用户并将某一用户的表导进来
    便当
    登陆weblogic后页面控制台卡主
    weblogic启动错误 Unrecognized option: -jrockit
    Linux静默安装weblogic
    在vim下按ctrl+s后界面卡住
    使用SQL语句从数据库一个表中随机获取数据
    查询json数据结构的8种方式
  • 原文地址:https://www.cnblogs.com/KYin/p/11071634.html
Copyright © 2011-2022 走看看