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

    题目:给出一篇英文文章,给英文单词来个“成语接龙”,输出最长链的单词。

    思路:这个题我经过思考觉得是从第一个读入的单词来说进行成语接龙一直到最后。但是我一直认为这个题目可以找出最长的单词链,应该从最长的单词朝找起,但是具体算法我还是没有思考出来,之后我会给予算法。先说第一种有顺序的。我的想法是先将单词从一开始提取出来然后进行查重处理,得到一个单词数组之后从第一个的字符进行判断相同,在进行输入到文件中,若不同则进行下次循环。

    这是我的代码其中:

    findword.java

    复制代码
    package Week15;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    
    public class Findword {
        private String word;
        public Findword() {
            word="";
        }
        public String getWord() {
            return word;
        }
        public void setWord(String word) {
            this.word = word;
        }
        public void input(Findword[] word) {
            String str;
            try {
                BufferedReader in=new BufferedReader(new FileReader("input2.txt"));
                while((str = in.readLine())!=null) {
                    change(str,word);
                }
                
                in.close();
            }
            catch (IOException e) {
                System.out.println("缓冲区错误");
            }
           
        }
        public void output(String[] word) throws IOException {
            try {
                FileWriter file=new FileWriter("output1.txt");
                BufferedWriter in = new BufferedWriter(file);
                if(word[0]==null)in.write("输入错误!");
                else {
                    for(int i=0;word[i]!=null;i++) {
                    in.write(word[i]);
                    in.newLine();
                }
                }
                in.flush();
                in.close();
                
            }
            catch (IOException e) {
                System.out.println("缓冲区2错误");
            }
           
        }
        private void change(String str, Findword[] word2) {
            char[] s1=str.toCharArray();
            String str1=null;
            int star=0,end=0;
            for(int i=0;i<s1.length;i++) {
                if((s1[i]>90&&s1[i]<97)||s1[i]<65||s1[i]>122) {
                    if(star==0&&end==0) {
                        star=i;
                        continue;
                    }
                    else {
                        end=i;
                    }
                    if(star==0)continue;
                    str1=str.substring(star+1,end);
                    if(star+1==end) {star=end;continue;}
                    //System.out.println("Str1="+str1+"_");
                    addword(word2,str1);
                    star=end;
                }
            }
            
        }
        private void addword(Findword[] word2, String str1) {
            int j=0;
            boolean f=false;
            for(int i=0;i<word2.length;i++) {
                if(word2[i].getWord().equals("")) {f=true;j=i;break;}
                if(word2[i].getWord().equals(str1)) {break;}
            }
            if(f==true) {
                word2[j]=new Findword();
                word2[j].setWord(str1);
            }
        }
        public String[] getarray(Findword[] word){
            String [] array=new String[99999];
            int num=1;
            if(word[0]!=null) {
                char[] str=word[0].getWord().toCharArray();
                char end=str[str.length-1];
                array[0]=word[0].getWord();
                for(int i=1;!word[i].getWord().equals("");i++) {
                    str=word[i].getWord().toCharArray();
                    if(str[0]==end||str[0]-end==32||end-str[0]==32) {
                        array[num]=word[i].getWord();
                        end=str[str.length-1];
                        num++;
                        }
                    else ;
                    
                }
            }
            return array;
        }
    }
    复制代码

    longestChain.java:

    复制代码
    package Week15;
    
    import java.io.IOException;
    
    public class LongestChain {
        public static void main(String[] args) throws IOException {
            Findword[] word2= new Findword[999999];
            String [] str=new String [99999];
            for(int i=0;i<word2.length;i++) {
                word2[i]=new Findword();
            }
             word2[0].input(word2);
             //for(int i=0;!word2[i].getWord().equals("");i++) {
             //    System.out.println(word2[i].getWord());
            //}
            str=word2[0].getarray(word2);
            //for(int i=0;str[i]!=null;i++) {
            //    System.out.println(str[i]);
            //}
            word2[0].output(str);
            
        }
        
    }
    复制代码

    这次测试中我体会到了什么叫做及时做笔记将代码封装起来进行相关的调用,这次我的思路很明确一将单词提取出来二将单词连接起来即完成任务。但是我上一次的程序的单词提取出来的程序没有封装起来以及相关的数目加和计算更是乱成一团。值得庆幸的是我今天没有想从原来的代码上进行二次开发二十零写一个更好的代码进行开发。这次我将修改我的程序将我的程序更好的封装起来,以及各个函数的任务更明确。

  • 相关阅读:
    option 变为不可选
    html表格 横跨多行跨多列
    ultraEdit 关键字颜色 与 字体模糊 解决办法
    更改U盘 硬盘背景
    js 函数带值。调用
    Blitz: a collection of software designed to support a universitylevel course on Operating Systems
    不错的Qt入门
    Linux命令行技巧zz
    rvalue_references
    http://channel9.msdn.com/
  • 原文地址:https://www.cnblogs.com/huan-ch/p/11064638.html
Copyright © 2011-2022 走看看