在给定的两个列表中查找字符串中子字符串的出现

时间:2018-10-25 02:34:49

标签: java data-structures

给出两个列表语句和列表查询

我有两个发现句子中查询的发生的地方。

示例

  1. “ Pulkit喜欢StackOverflow和编码”

  2. “ Pulkit不喜欢Reddit”

  3. “ Pulkit冰淇淋”

查询

  1. Pulkit编码

  2. like

  3. 确实

该函数应返回查询

  1. 句子[0]

  2. 句子[1],句子[2]

  3. 句子[1]

我已经使用HashMap解决了这个问题,但是它是二次方的,我想知道如何在线性时间内做到这一点。

解决方案

emap

1 个答案:

答案 0 :(得分:1)

我的代码与人类的思想相似。

\ b允许您使用\ bword \ b形式的正则表达式执行“仅整个单词”搜索。

希望我的代码对您有所帮助。

public class MainClass {

    public static void main(String [] args)
    {
        List<String> sentences = new ArrayList<String>();
        sentences.add("Pulkit likes StackOverflow and coding");
        sentences.add("Pulkit does not like Reddit");
        sentences.add("Pulkit like ice cream");

        List<String> queries = new ArrayList<String>();
        queries.add("Pulkit coding");
        queries.add("like");
        queries.add("does");

        findMatch(sentences, queries);
    }

    public static void findMatch(List<String> sentences, List<String> queries) {
        for(String query : queries) {
            System.out.print("]");

            String match = ".*\\b" + query.replace(" ", "\\b.*") + "\\b.*";             
            for (int iSentence = 0; iSentence < sentences.size(); iSentence++) {
                if(sentences.get(iSentence).matches(match)) {
                    System.out.print(" " + iSentence);
                }
            }

            System.out.println("");
        }
    }
}

控制台输出:

] 0
] 1 2
] 1