我想知道将字符串与字符串列表进行比较的最佳方法。这是我脑海中的代码,但很明显,它在时间复杂度方面并不好。
for (String large : list1) {
for (String small : list2) {
if (large.contains(small)) {
// DO SOMETHING
} else {
// NOT FOR ME
}
}
// FURTHER MANIPULATION OF STRING
}
两个字符串列表都可以包含超过一千个值,因此最坏情况下的复杂度可能会增加到1000×1000×长度,这是一个烂摊子。在上面给出的场景中,我想知道执行将字符串与字符串列表进行比较的最佳方法。
答案 0 :(得分:1)
你可以这样做:
for (String small : list2) {
if (set1.contains(small)) {
// DO SOMETHING
} else {
// NOT FOR ME
}
}
set1应该是较大的String列表,而不是将其保留为List<String>
,请使用Set<String>
或HashSet<String>
答案 1 :(得分:0)
感谢sandeep的第一个回答。这是解决方案:
List<String> firstCollection = new ArrayList<>();
Set<String> secondCollection = new HashSet<>();
//POPULATE BOTH LISTS HERE.
for(String string: firstCollection){
if(secondCollection.contains(string)){
//YES, THE STRING IS THERE IN THE SECOND LIST
}else{
//NOPE, THE STRING IS NOT THERE IN THE SECOND LIST
}
}
答案 2 :(得分:-1)
不幸的是,这是一个困难和混乱的问题。这是因为您要检查一个小字符串是否是一串大字符串的子字符串,而不是检查小字符串是否等于一堆大字符串。
最佳解决方案取决于您需要解决的问题,但这是合理的首次尝试:
在临时位置,将所有大字符串连接在一起,然后在这个长连接字符串上构造一个suffix tree。有了这个结构,我们应该能够快速找到所有small
中任何给定large
的所有子串匹配。