列出最长链的单词

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

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

这是我的代码其中:

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); } }
复制代码

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

转载于:https://www.cnblogs.com/huan-ch/p/11064638.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值