计算最长英语单词链

问题如下:

大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,

快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最长的定义是:最多单词数量,和单词中字母的数量无关。

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

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

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

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

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

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

  1 import java.io.*;
  2 import java.text.*;
  3 import java.util.*;
  4 public class Text_2 {
  5 static int N=5;
  6 static String b[]=new String[500];
  7 public static void main(String[] args) 
  8     {
  9         
 10         String sz=writeFromFile.readTxtFile("input2.txt");
 11         String ltxt=null;
 12         if(sz==null)
 13         {
 14             System.out.println("找不到指定的文件"); 
 15         }
 16         else if(sz=="kong")
 17         {
 18             System.out.println("文件为空!");  
 19         }
 20         
 21         else
 22         {
 23             System.out.println(ltxt=StatList1(sz)); 
 24             
 25             select(b);
 26         }
 27         
 28         try {
 29         writeFromFile.daochu(ltxt);
 30         } catch (IOException e) {
 31         // TODO Auto-generated catch block
 32         e.printStackTrace();
 33         }
 34         
 35         
 36 
 37     }
 38 public static int woor(String a)
 39     {
 40         int n=0;
 41         File ctoFile = new File("stopword.txt");
 42         InputStreamReader rdCto;
 43         try {
 44             rdCto = new InputStreamReader(new FileInputStream(ctoFile));
 45             BufferedReader bfReader = new BufferedReader(rdCto);
 46             String txtline = null;
 47             try {
 48                 while ((txtline = bfReader.readLine()) != null) 
 49                 {
 50                     if(txtline.equals(a))
 51                         {
 52                             n=1;
 53                         }
 54                 }
 55                 bfReader.close();
 56             } catch (IOException e) {
 57                 // TODO Auto-generated catch block
 58                 e.printStackTrace();
 59             }
 60              
 61         } catch (FileNotFoundException e) {
 62             // TODO Auto-generated catch block
 63             e.printStackTrace();
 64         }
 65         return n;
 66     }
 67 public static ArrayList<String> getFiles(String path) {
 68         ArrayList<String> files = new ArrayList<String>();
 69         File file = new File(path);
 70         File[] tempList = file.listFiles();
 71         for (int i = 0; i < tempList.length; i++) {
 72             if (tempList[i].isFile()) {
 73                 files.add(tempList[i].toString());
 74             }
 75             if (tempList[i].isDirectory()) {
 76             }
 77         }
 78         return files;
 79     }
 80 public static String StatList1(String str) {
 81         StringBuffer sb = new StringBuffer();
 82         HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打开一个哈希表
 83         String[] slist = str.split("[^a-zA-Z\']+");
 84         for (int i = 0; i < slist.length; i++) 
 85         {
 86             if (!has.containsKey(slist[i])) 
 87             { 
 88                    has.put(slist[i], 1);
 89             } 
 90             else 
 91             {
 92                    has.put(slist[i],has.get(slist[i])+1 );
 93             }
 94         }
 95         Iterator<String> iterator = has.keySet().iterator();
 96         String a[]=new String[500];
 97         int s[]=new int[500];
 98         int judge;
 99         int n=400;
100         for(int i=0;i<n;i++)
101         {
102             iterator = has.keySet().iterator();
103             while(iterator.hasNext())
104             {
105                 String word = (String) iterator.next();
106                 if(s[i]<has.get(word))
107                 {
108                     s[i]=has.get(word);
109                     a[i]=word;
110                     b[i]=word;
111                 }
112              }
113             judge=woor(a[i]);
114             if(judge==1)
115             {
116                 n++;
117                 has.remove(a[i]);
118             }
119             else
120             {
121 //                System.out.println(a[i]+"6666");
122 //             sb.append("单词:").append(a[i]).append(" 次数").append(has.get(a[i])).append("\r\n");
123              has.remove(a[i]);
124             }
125         }
126              return sb.toString();
127         }
128 public static void select(String b[])
129     {
130         List<Object> list=new ArrayList<>();
131         int q=0;
132         int n0=0;
133         for(int i=0;i<b.length;i++)
134         {
135             if(b[i]!=null)
136             {
137                 n0++;
138             }
139         }
140         if(n0==1)
141         {
142             System.out.println("只有一个单词");
143         }
144         else
145         {
146             String c="and";
147             q=c.length();
148             char n1=c.charAt(0);
149             char n2=c.charAt(q-1);
150             list.add(c);
151             for(int j=0;j<b.length;j++)
152             {
153                 String w=b[j];
154                 if(w!=null)
155                 {
156                     int e=w.length();
157                     char n3=w.charAt(0);
158                     char n4=w.charAt(e-1);
159                     if(n2==n3)
160                     {
161                         list.add(w);
162                         n1=n3;
163                         n2=n4;
164                     }
165                 }
166                 
167             }
168             String l=null;
169 //优雅退出
170             if(list.size()==1)
171             {
172                 System.out.println("没有首尾相连");
173             }
174             else
175             {
176             for(int i=0;i<list.size();i++)
177             {
178                 l=l+list.get(i)+"->";
179                 System.out.println(list.get(i)+"->");
180             }
181             try {
182                 daochu(l);
183             } catch (IOException e) {
184                 // TODO Auto-generated catch block
185                 e.printStackTrace();
186             }
187             }
188         }
189         
190         
191     }
192     public static void daochu(String a) throws IOException
193     {
194         File file =new File("output1.txt");
195         Writer out =new FileWriter(file);
196         String data=a;
197         out.write(data);
198         out.close();
199 
200     }
201 
202 
203     
204     
205 
206 
207 }
dancilian

 

posted @ 2019-06-08 01:18  夜神风  阅读(182)  评论(0编辑  收藏  举报