有一个单词本文件,里面记录了很多单词,一个单词一行。例如: 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 ..... 请编程找出单词本中所有单词的最短匹配前缀。
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 BufferedReader in=new BufferedReader(new FileReader(filename)); String s; 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 try{ sb=tn.read("a.txt" ); }catch(IOException e){} String[] word=sb.toArray(new String[0]); try{ tn.shortestPrefix(word); }catch(NullPointerException e){} } }