计算最长英语单词链

先从文件中把文本读取出来,,s1[i].substring(0, 1)是取字符串头,然后用 s1[j].substring(s1[j].length()-1);这个substring方法取字符串尾,搜索取头尾是,在网上看到了有个容器法,应用到本题目中,即设置一个list容器,从第一个单词开始,就把它加入容器中,以它的尾字母作为key值,然后依次循环比较,找到首字母等于key的单词,就把它也存入容器,并将key值作为它的尾部。然后在这层之外再套一层循环,考虑到每个单词都作为第一个单词的情况,再将每次循环所得到的容器加入到一个新的容器中,容器中套容器。最后比较容量最大的容器就是最长的单词链。

package letteron;
 
import java.io.*;
import java.util.*;
 
 
 
 
public class Letteron {
 
    public static void main(String[] args)throws FileNotFoundException, IOException  {
        // TODO 自动生成的方法存根
 
        File file=new File("F:/java开发/input.txt");
        File file2=new File("F:/java开发/output.txt");
 
         
        if(!file.exists())
        {
            System.out.println("文件不存在!");
        }
        else if(file.exists() && file.length() == 0) { 
            System.out.println("文件为空!"); 
        } //判断是否文件为空
        else
        {
            BufferedReader br=new BufferedReader(new FileReader(file));
            BufferedWriter bw = new BufferedWriter(new FileWriter("F:/java开发/output.txt")) ;
             
 
            String s;
            int i,j;
            ArrayList<ArrayList<String>> listall=new ArrayList();
            String key;
            s=br.readLine();
            //将文本文件中的所有信息变为字符串
            String []s1=s.split(" ");//以空格为分割划分每个单词
            if(s1.length==1)
                System.out.println("单词数为1");
            else
            {
                     
           for(i=0;i<s1.length;i++)
           {
               System.out.println(s1[i]);
           }//测试录入
            
           for(j=0;j<s1.length;j++)
           {
               ArrayList<String> list=new ArrayList<String>();
               key=s1[j].substring(s1[j].length()-1);
               list.add(s1[j]);
               System.out.println("key:"+key);
               for(i=1;i<s1.length;i++)
                {
                   
               if(key.equals(s1[i].substring(0, 1)))
               {
                   list.add(s1[i]);
                   key=s1[i].substring(s1[i].length()-1);
               }
               else
                   continue;
                }
               listall.add(list);
           }
           int max=0;
           int count=0;
            
           for(i=0;i<listall.size();i++)
           {
               if(max<listall.get(i).size())
               {
                   max=listall.get(i).size();
                   count=i;
               }
           }
           System.out.println("排位"+count);
           System.out.println("最长单词链为:");
           for(i=0;i<listall.get(count).size();i++)
           {
               System.out.println(listall.get(count).get(i));
               bw.write(listall.get(count).get(i));
               bw.write(" ");
           }
            br.close();
            bw.close();
            }
        }
        }
         
    }
原文地址:https://www.cnblogs.com/liuxiaojieqqq/p/11071561.html