给出两个列表语句和列表查询
我有两个发现句子中查询的发生的地方。
示例
“ Pulkit喜欢StackOverflow和编码”
“ Pulkit不喜欢Reddit”
“ Pulkit冰淇淋”
查询
Pulkit编码
like
确实
该函数应返回查询
句子[0]
句子[1],句子[2]
句子[1]
我已经使用HashMap解决了这个问题,但是它是二次方的,我想知道如何在线性时间内做到这一点。
解决方案
emap
答案 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