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

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

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

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

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

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

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

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

    自己没有完成代码,借鉴了别人的代码,进行了完善和改进,增加了没有任何单词、只有一个单词、没有可以首尾相连的单词的判断,能够实现一万个单词的检索。

    package word2;
    
    import java.io.*;
    
    public class Word {
    
        public static void danci(String s) throws IOException {
               
                BufferedReader br = new BufferedReader(new FileReader(s));
                StringBuffer sb = new StringBuffer();
                String text = null;
                while ((text = br.readLine()) != null) {
                    sb.append(text);// 将读取出的字符追加到stringbuffer中
                }
                br.close(); // 关闭读入流
                String str = sb.toString().toLowerCase(); // 将stringBuffer转为字符并转换为小写
                String[] words = str.split("[^(a-zA-Z)]+"); // 非单词的字符来分割,得到所有单词
                StringBuffer yao = new StringBuffer();
                String b1=words[0];
                yao.append(b1);
                yao.append(" ");
                if(b1.length()<=1){
                    System.out.println("内容为空");
                    
                }else {
                String end=b1.substring(b1.length()-1,b1.length());
                
               for(int i=1;i<words.length;i++)
               {  
                String start=words[i].substring(0,1);
                if(end.equals(start))
                {
                    end=words[i].substring(words[i].length()-1,words[i].length());
                    yao.append(words[i]);
                    yao.append(" ");
                    }
                }
               }
               
            if((yao.toString().length())<=(words[0].length()+1)) {
                System.out.println("无");}    //用来判断无法组成单词链时,使其不输出第一个单词,如果输出只有一个单词则为空
            else {
               File file =new File("text/output.txt");
                try {
                     file.createNewFile();
                } catch (IOException e) {
                   e.printStackTrace();      
               }
              
                try {
                    
                      FileWriter fw =new FileWriter(file);
                      fw.write(yao.toString());
                      fw.flush();
                      fw.close();
                }
                catch (IOException e) {
                       e.printStackTrace();      
                   }
                }
        
        }
    
    
    // 判断文件是否存在
    public static boolean judeFileExists(File file) {
    
        if (file.exists()) {
            System.out.println("输入文件存在");
            return true;
        } else {
            System.out.println("输入文件不存在");
    
            return false;
        }
    }
    public static void main(String[] args) throws IOException {
            // TODO 自动生成的方法存根
            String filename = "text/input.txt";
            File a = new File(filename);
            if (judeFileExists(a)) {
                danci(filename);
            } else {
            }
        }
    }
    View Code

  • 相关阅读:
    48. Rotate Image
    47. Permutations II
    46. Permutations
    45. Jump Game II
    44. Wildcard Matching
    43. Multiply Strings
    42. Trapping Rain Water
    41. First Missing Positive
    40. Combination Sum II
    39. Combination Sum
  • 原文地址:https://www.cnblogs.com/lixv2018/p/11063673.html
Copyright © 2011-2022 走看看