首页 > 试题广场 >

有一个词典,包含N个英文单词,现在任意给一个字符串,设计算法

[问答题]
有一个词典,包含N个英文单词,现在任意给一个字符串,设计算法找出包含这个字符串的所有英文单词
这道题完完全全就是ac自动机要解决的问题。所以,这道题的标签不应该是大数据。
发表于 2016-12-04 19:19:33 回复(1)
public class 英语词典 {

    public static void m1(){
        String[] dictionary={"consistent","complie","contact","cure"};
        String str="e";
        String[] s=getWords(dictionary,str);
        for(String i:s){
                if(null!=i){
                    System.out.println(i);
                }
        }
    }
    public static String[] getWords(String[] s,String str){
        String[] s1=new String[s.length];
        int j=0;
        for(int i=0;i<s.length;i++){
            if(isSubString(s[i],str)){
                s1[j]=s[i];
                j++;
            }
        }
        return s1;
    }
    public static boolean isSubString(String str1,String str2){
        boolean isSub=false;
        StringBuilder str=new StringBuilder();
        for(int i=0;i<str1.length()-str2.length()+1;i++){
            str.append(str1.substring(i, i+str2.length()));
            if(str.toString().equals(str2))isSub=true;
            str.delete(0, str.length());
        }
        return isSub;
    }
    public static void main(String...args){
        m1();
    }
}
发表于 2015-05-12 16:54:08 回复(0)
一个可行的思路:给输入字符串,利用字母建立倒排索引,索引中存储该字母 出现在哪个单词以及在单词中位置;查询时,利用倒排找到所有的单词,并求交集并且位置要连续
编辑于 2015-05-18 13:21:38 回复(0)
倒排索引。
发表于 2017-08-21 22:17:51 回复(0)
找出包含这个字符串的所有英文单词?感觉描述不大准确呢。。。
发表于 2017-08-08 19:35:02 回复(0)
建立所有单词的后缀树
发表于 2016-09-17 15:17:03 回复(1)
一个思路是先讲N个单词存进map,然后再降字符串中所有单词存进map,若次数大于1则输出
发表于 2016-09-03 23:42:29 回复(0)
这题也可以利用ac自动机求解
发表于 2015-10-13 22:41:15 回复(1)
利用key-value
key是单词的字典顺序排序
value是含有这些字母的单词
对于给定字符串str,先进行字典排序,然后找到对应的value就可以了。
貌似时间复杂度和空间复杂度不太好。
发表于 2015-08-22 09:41:40 回复(1)