一个简单的解决方案是将字符串插入到 a 中Set<String>
,然后对其执行两次查找,一次查找第一个字符,b
如果不匹配,则查找前两个字符b
。
例如,
class StartsWithAny {
private Set<String> set;
public StartsWithAny(String[] array) {
set = new HashSet<String>();
for (String a : array) {
set.add(a);
}
}
// returns true if b starts with any strings contained in array
// with the condition that b.length() <= 2
public boolean startsWithAny(final String b) {
if (b.length() > 0 && set.contains(b.substring(0, 1))) {
return true;
}
if (b.length() > 1 && set.contains(b.substring(0, 2))) {
return true;
}
return false;
}
}
对此的一种变体是使用两个单独Set
的 s,一个用于单字符查找,一个用于两个字符查找,这将稍微提高性能。
另一种类似的方法是实现一种二分搜索算法,该算法将对排序后的数组进行操作并执行类似的功能。