很明显,1035这道题考察的是对String的使用。只要细心,就可以做出来。并且,需要注意的是,输出的顺序是按照字典的顺序进行输出。(就是因为这个,WA了很多次)。 代码如下: import java.util.*; public class Main { ArrayList<String> dictionary=new ArrayList<String>(); ArrayList<String> check=new ArrayList<String>(); ArrayList<String> candinate=new ArrayList<String>(); //判断单词是否是正确的 public boolean IsCorrect(int i) { boolean tag=false; String word=check.get(i); for(int j=0;j<dictionary.size();j++) { if(word.equals(dictionary.get(j))) { return true; } } return tag; } //查看字典里的word替换一个字母之后,是否与检查的单词相符 public void replaceletter(int i) { String word=check.get(i); for(int j=0;j<dictionary.size();j++) { int tag=0; boolean tag1=true; String temp=dictionary.get(j); if(word.length()!=temp.length()) { continue; } char[] wor=word.toCharArray(); char[] tep=temp.toCharArray(); for(int k=0;k<wor.length&&tag1;k++) { if(tag>2) { tag1=false; continue; } if(wor[k]!=tep[k]) { tag++; } } if(tag==1) { boolean mmtag=true; for(int mm=0;mm<candinate.size();mm++) { if(candinate.get(mm).equals(temp)) { mmtag=false; } } if(mmtag) candinate.add(temp); } } } //看字典里的word删除某个字母后,是否与这个单词相符 public void addletter(int i) { String word=check.get(i); for(int j=0;j<dictionary.size();j++) { String temp=dictionary.get(j); if(temp.length()-1==word.length()) { if(temp.length()!=1) { for(int k=0;k<temp.length();k++) { String mytemp=""; if(k==0) { mytemp=temp.substring(1,temp.length()); } else if(k==temp.length()-1) { mytemp=temp.substring(0,temp.length()-1); } else { mytemp=temp.substring(0,k)+temp.substring(k+1,temp.length()); } //System.out.println("mytemp="+mytemp); if(mytemp.equals(word)) { boolean mmtag=true; for(int mm=0;mm<candinate.size();mm++) { if(candinate.get(mm).equals(temp)) { mmtag=false; } } if(mmtag) candinate.add(temp); } } } } else { continue; } } } //删除某个字母后,看是否与字典中的单词相符 public void deleteletter(int i) { String word=check.get(i); for(int j=0;j<dictionary.size();j++) { String temp=dictionary.get(j); if(word.length()-1==temp.length()) { if(word.length()!=1) { for(int k=0;k<word.length();k++) { String mytem=""; if(k==0) { mytem=word.substring(1,word.length()); } else if(k==word.length()-1) { mytem=word.substring(0,word.length()-1); } else { mytem=word.substring(0,k)+word.substring(k+1,word.length()); } //System.out.println("mytem="+mytem); if(mytem.equals(temp)) { boolean mmtag=true; for(int mm=0;mm<candinate.size();mm++) { if(candinate.get(mm).equals(temp)) { mmtag=false; } } if(mmtag) candinate.add(temp); } } } } else { continue; } } } public void getInput() { String s1=null; Scanner scan=new Scanner(System.in); while(scan.hasNext()) { s1=scan.nextLine(); if(s1.equals("#")) { break; } dictionary.add(s1); } while(scan.hasNext()) { s1=scan.nextLine(); if(s1.equals("#")) { break; } check.add(s1); } //对需检查的单词逐个进行检查 for(int i=0;i<check.size();i++) { candinate.clear(); if(this.IsCorrect(i)) { System.out.println(check.get(i)+" is correct"); } else { this.deleteletter(i); this.replaceletter(i); this.addletter(i); System.out.print(check.get(i)+":"); //注意,题目要求按照字典的顺序输出结果 int[] order=new int[candinate.size()]; int[] output=new int[candinate.size()]; for(int k=0;k<candinate.size();k++) { String te=candinate.get(k); boolean myt=true; for(int k1=0;(k1<dictionary.size())&&myt;k1++) { if(te.equals(dictionary.get(k1))) { //记录下该单词在字典中的顺序 order[k]=k1; myt=false; continue; } } } int top=-1; //对output进行初始化 for(int kk=0;kk<order.length;kk++) { output[kk]=kk; } for(int kk=0;kk<order.length-1;kk++) { for(int j=0;j<order.length-1-kk;j++) { if(order[j]>order[j+1]) { int temp=order[j]; order[j]=order[j+1]; order[j+1]=temp; temp=output[j]; output[j]=output[j+1]; output[j+1]=temp; } } } for(int kk=0;kk<output.length;kk++) { String ss1=candinate.get(output[kk]); System.out.print(" "+ss1); } System.out.print("/n"); } } } public static void main(String[] args) { Main my=new Main(); my.getInput(); } }