计算最长英文单词链

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

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

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

设计思路:

1、判断是否为单词

2、提取单词的首字母,与前者的尾字母进行判断

3、从第一单词开始循环往后判断

 

jielong.java

package lianxi;

import java.io.FileReader;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class jielong {

    public static void main(String[] args)
    {
        String now="";
        List<String> l=new ArrayList();
        List<List<String>> ls=new ArrayList<List<String>>();
        int l_i=0,ls_i=0;
        int i=0,t=0,flag=0,max=0;
        try
        {
            FileReader fr=new FileReader("d:\\input.txt");
            Scanner in =new Scanner(fr);
            //初始化

            //读取
            while(in.hasNext())
            {
                now=in.next();
                System.out.println(now);
                if(flag==0)
                {
                    l=new ArrayList();
                    l.add(now);
                    ls.add(l);
                    flag=1;
                }
                else
                {
                    for(i=0;i<ls.size();i++)//遍历所有表
                    {
                        if(ifLian(ls.get(i).get(ls.get(i).size()-1),now))//首尾相连
                        {
                            l=new ArrayList();
                            l=ls.get(i);
                            l.add(now);
                            ls.set(i, l);
                        }

                    }
                    l=new ArrayList();
                    l.add(now);
                    ls.add(l);
                }
                
            }
            
            //寻找最大
            max=ls.get(0).size();
            for(i=0;i<ls.size();i++)
            {
                if(max<ls.get(i).size())
                {
                    max=ls.get(i).size();
                }
            }
            
            for(i=0;i<ls.size();i++)
            {
                for(t=0;t<ls.get(i).size();t++)
                {
                    System.out.print(ls.get(i).get(t)+" ");
                }
                System.out.println();
            }
            PrintWriter fw=new PrintWriter("d:\\output.txt");
            for(i=0;i<ls.get(max).size();i++)
            {
                fw.println(ls.get(i)+" ");
            }
            fw.flush();
            fw.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        

    }
    public static boolean ifLian(String a,String b)//a的结尾与b的开头是否一致   apple
    {
        if(a.charAt(a.length()-1)==b.charAt(0))
        {
            return true;
        }
        else
        {
            return false;
        }
            
            
    }

}
View Code

java程序显示所有的接龙词语

 

input和output

 

 

总结:判断单词的收尾字母这里的逻辑要理一理

posted @ 2019-06-09 19:46  米汤000  阅读(222)  评论(0编辑  收藏  举报