经典指数          
原因
2072
浏览数
0
收藏数
 

有一个单词本文件,里面记录了很多单词,一个单词一行。例如: as awsome ass assert awake asset ..... 单词实际上有个特征,例如:我们敲出as的时候,我们到底要敲什么,机器是无法推测的,因为对应的结果可能是ass,assert, asset;而当我们敲出asser的时候,机器马上可以推测出我们的意图:只可能是assert。我们称asser为assert的最短匹配前缀。 找出单词本中所有单词的最短匹配前缀,并按照里面的格式输出: as as awsome aws ass ass assert asser awake awa asset asset ..... 请编程找出单词本中所有单词的最短匹配前缀。

     举报   纠错  
 
切换
1 个答案

import java.io.*;

import java.util.*;

public class Test{

//比较两个字符串,返回第一个不相等索引位置

 public  int cmp(String a,String b) throws NullPointerException{

  int len=a.length()>b.length()?b.length():a.length();

  int index=0;

  for(int j=0;j

    if(a.charAt(j)==b.charAt(j)){

      index++;

    }else break;

  }

  return index;

}

//寻找最短匹配前缀,并按格式输出

 public  void shortestPrefix(String[] str) throws NullPointerException{

    int tmp=0;

    int il=str.length;

    int[] ind=new int[il];

    for(int i=0;i

        for(int t=i+1;t

   try{

        tmp=cmp(str[i],str[t]);

          if(tmp>ind[i]){

          ind[i]=tmp;

          }

          if(tmp>ind[t]){

          ind[t]=tmp;

          }

          tmp=0;

}catch(NullPointerException e){}

         

}

        if(ind[i]

          System.out.println(str[i]+' '+str[i].substring(0, ind[i]+1) );

        }else  System.out.println(str[i]+' '+str[i].substring(0,

ind[i]) );

      }

 }

//从本地读入文件

 public ArrayList read(String filename) throws IOException{

    BufferedReader in=new BufferedReader(new FileReader(filename));

    String s;

    ArrayList sb=new ArrayList();

    int i=0;

    while((s=in.readLine())!=null){

      sb.add(s);

    }

    in.close();

    return sb;

 }

public static void main(String[] args){

    Test tn=new Test();

    ArrayList sb=new ArrayList();

    try{

       sb=tn.read("a.txt" );

    }catch(IOException e){}

    String[] word=sb.toArray(new String[0]);

    try{

       tn.shortestPrefix(word);

    }catch(NullPointerException e){}

    }

}

 
切换
撰写答案